diff --git a/build.gradle b/build.gradle index 63df0be..049ff22 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,8 @@ plugins { - id 'fabric-loom' version '1.5-SNAPSHOT' + id "fabric-loom" version "1.9-SNAPSHOT" } -sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 +sourceCompatibility = targetCompatibility = JavaVersion.VERSION_21 archivesBaseName = project.archives_base_name version = project.mod_version diff --git a/gradle.properties b/gradle.properties index f3b0886..a7d86e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties (https://fabricmc.net/versions.html) -minecraft_version=1.20.4 -yarn_mappings=1.20.4+build.3 -loader_version=0.15.2 +minecraft_version=1.21.1 +yarn_mappings=1.21.1+build.3 +loader_version=0.16.5 # Mod Properties mod_version=1.0.2 @@ -13,4 +13,4 @@ archives_base_name=blackout # Dependencies # Meteor (https://maven.meteordev.org/) -meteor_version=0.5.6-SNAPSHOT +meteor_version=0.5.8-SNAPSHOT diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..d64cd49 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e411586..e48eca5 100644 --- 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.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/kassuk/addon/blackout/BlackOutModule.java b/src/main/java/kassuk/addon/blackout/BlackOutModule.java index 6f289b4..70cb86d 100644 --- a/src/main/java/kassuk/addon/blackout/BlackOutModule.java +++ b/src/main/java/kassuk/addon/blackout/BlackOutModule.java @@ -3,6 +3,7 @@ import kassuk.addon.blackout.enums.SwingHand; import kassuk.addon.blackout.enums.SwingState; import kassuk.addon.blackout.enums.SwingType; +import kassuk.addon.blackout.managers.Managers; import kassuk.addon.blackout.modules.SwingModifier; import kassuk.addon.blackout.utils.PriorityUtils; import kassuk.addon.blackout.utils.SettingUtils; @@ -129,7 +130,7 @@ public void interactBlock(Hand hand, Vec3d blockHitVec, Direction blockDirection public void useItem(Hand hand) { SettingUtils.swing(SwingState.Pre, SwingType.Using, hand); - sendSequenced(s -> new PlayerInteractItemC2SPacket(hand, s)); + sendSequenced(s -> new PlayerInteractItemC2SPacket(hand, s, Managers.ROTATION.lastDir[0], Managers.ROTATION.lastDir[1])); SettingUtils.swing(SwingState.Post, SwingType.Using, hand); } diff --git a/src/main/java/kassuk/addon/blackout/hud/CatGirl.java b/src/main/java/kassuk/addon/blackout/hud/CatGirl.java index a14a8e5..16baff5 100644 --- a/src/main/java/kassuk/addon/blackout/hud/CatGirl.java +++ b/src/main/java/kassuk/addon/blackout/hud/CatGirl.java @@ -30,7 +30,7 @@ public class CatGirl extends HudElement { .defaultValue(SideMode.Right) .build() ); - private final Identifier catgirl = new Identifier("blackout", "catgirl.png"); + private final Identifier catgirl = Identifier.of("blackout", "catgirl.png"); public static final HudElementInfo INFO = new HudElementInfo<>(BlackOut.HUD_BLACKOUT, "catgirl", "It's a Cat girl what do you want", CatGirl::new); diff --git a/src/main/java/kassuk/addon/blackout/hud/HudWaterMark.java b/src/main/java/kassuk/addon/blackout/hud/HudWaterMark.java index 4c5079f..0fd1fd7 100644 --- a/src/main/java/kassuk/addon/blackout/hud/HudWaterMark.java +++ b/src/main/java/kassuk/addon/blackout/hud/HudWaterMark.java @@ -49,7 +49,7 @@ public class HudWaterMark extends HudElement { .build() ); - private final Identifier LOGO = new Identifier("blackout", "logo.png"); + private final Identifier LOGO = Identifier.of("blackout", "logo.png"); public static final HudElementInfo INFO = new HudElementInfo<>(BlackOut.HUD_BLACKOUT, "BlackoutWatermark", "The Blackout watermark.", HudWaterMark::new); diff --git a/src/main/java/kassuk/addon/blackout/hud/TargetHud.java b/src/main/java/kassuk/addon/blackout/hud/TargetHud.java index 0f72459..b2ff0d6 100644 --- a/src/main/java/kassuk/addon/blackout/hud/TargetHud.java +++ b/src/main/java/kassuk/addon/blackout/hud/TargetHud.java @@ -208,7 +208,7 @@ public void render(HudRenderer renderer) { // Health RenderUtils.text(String.valueOf(Math.round((renderHealth) * 10) / 10f), stack, 20, 81 - mc.textRenderer.fontHeight / 2f, textColor.get().getPacked()); - float barAnimation = MathHelper.lerp(mc.getTickDelta() / 10, lastHp, renderHealth); + float barAnimation = MathHelper.lerp(mc.getRenderTickCounter().getTickDelta(true) / 10, lastHp, renderHealth); float barStart = Math.max(mc.textRenderer.getWidth(String.valueOf(Math.round((renderHealth) * 10) / 10f)), mc.textRenderer.getWidth("36.0")) + 28; diff --git a/src/main/java/kassuk/addon/blackout/managers/RotationManager.java b/src/main/java/kassuk/addon/blackout/managers/RotationManager.java index fbf5339..fd7b8cf 100644 --- a/src/main/java/kassuk/addon/blackout/managers/RotationManager.java +++ b/src/main/java/kassuk/addon/blackout/managers/RotationManager.java @@ -42,7 +42,7 @@ public class RotationManager { private boolean unsent = false; public static final List history = new ArrayList<>(); boolean shouldRotate = false; - private float[] next; + public float[] next; private boolean rotated = false; private long key = 0; @@ -90,8 +90,9 @@ private void onRender(Render3DEvent event) { timer -= event.frameTime; if (timer > 0 && target != null && lastDir != null) { if (SettingUtils.shouldVanillaRotate()) { - mc.player.setYaw(MathHelper.lerpAngleDegrees(mc.getTickDelta(), prevDir[0], currentDir[0])); - mc.player.setPitch(MathHelper.lerp(mc.getTickDelta(), prevDir[1], currentDir[1])); + float tickDelta = mc.getRenderTickCounter().getTickDelta(true); + mc.player.setYaw(MathHelper.lerpAngleDegrees(tickDelta, prevDir[0], currentDir[0])); + mc.player.setPitch(MathHelper.lerp(tickDelta, prevDir[1], currentDir[1])); } } else if (target != null) { target = null; diff --git a/src/main/java/kassuk/addon/blackout/mixins/AccessorNbtCompound.java b/src/main/java/kassuk/addon/blackout/mixins/AccessorNbtCompound.java new file mode 100644 index 0000000..99d3fee --- /dev/null +++ b/src/main/java/kassuk/addon/blackout/mixins/AccessorNbtCompound.java @@ -0,0 +1,24 @@ +/* +* This file is a part the best minecraft mod called Blackout Client (https://github.com/KassuK1/Blackout-Client) +* and licensed under the GNU GENERAL PUBLIC LICENSE (check LICENCE file or https://www.gnu.org/licenses/gpl-3.0.html) +* Copyright (C) 2024 KassuK and OLEPOSSU +*/ + +package kassuk.addon.blackout.mixins; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +/** + * @author OLEPOSSU + */ + +@Mixin(NbtCompound.class) +public interface AccessorNbtCompound { + @Accessor("entries") + Map getEntries(); +} diff --git a/src/main/java/kassuk/addon/blackout/mixins/IEntitySetHeadYawS2CPacket.java b/src/main/java/kassuk/addon/blackout/mixins/IEntitySetHeadYawS2CPacket.java index 3d377ce..eb30db9 100644 --- a/src/main/java/kassuk/addon/blackout/mixins/IEntitySetHeadYawS2CPacket.java +++ b/src/main/java/kassuk/addon/blackout/mixins/IEntitySetHeadYawS2CPacket.java @@ -6,6 +6,6 @@ @Mixin(EntitySetHeadYawS2CPacket.class) public interface IEntitySetHeadYawS2CPacket { - @Accessor("entity") + @Accessor("entityId") int getId(); } diff --git a/src/main/java/kassuk/addon/blackout/mixins/IEntityStatusS2CPacket.java b/src/main/java/kassuk/addon/blackout/mixins/IEntityStatusS2CPacket.java index f5f5a36..635252e 100644 --- a/src/main/java/kassuk/addon/blackout/mixins/IEntityStatusS2CPacket.java +++ b/src/main/java/kassuk/addon/blackout/mixins/IEntityStatusS2CPacket.java @@ -6,6 +6,6 @@ @Mixin(EntityStatusS2CPacket.class) public interface IEntityStatusS2CPacket { - @Accessor("id") + @Accessor("entityId") int getId(); } diff --git a/src/main/java/kassuk/addon/blackout/mixins/IInteractEntityC2SPacket.java b/src/main/java/kassuk/addon/blackout/mixins/IInteractEntityC2SPacket.java index 52b4c21..8a5415a 100644 --- a/src/main/java/kassuk/addon/blackout/mixins/IInteractEntityC2SPacket.java +++ b/src/main/java/kassuk/addon/blackout/mixins/IInteractEntityC2SPacket.java @@ -15,5 +15,8 @@ public interface IInteractEntityC2SPacket { @Accessor("entityId") int getId(); + + @Accessor("type") + PlayerInteractEntityC2SPacket.InteractTypeHandler getType(); } diff --git a/src/main/java/kassuk/addon/blackout/modules/AnchorAuraPlus.java b/src/main/java/kassuk/addon/blackout/modules/AnchorAuraPlus.java index def7cf6..39cb91a 100644 --- a/src/main/java/kassuk/addon/blackout/modules/AnchorAuraPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/AnchorAuraPlus.java @@ -228,7 +228,7 @@ private void calculate(int index) { pos = blocks[i]; dmg = getDmg(pos); - self = BODamageUtils.anchorDamage(mc.player, mc.player.getBoundingBox(), pos); + self = BODamageUtils.anchorDamage(mc.player, mc.player.getBoundingBox(), pos.toCenterPos(), pos, false); if (!dmgCheck(dmg, self)) { continue; @@ -613,7 +613,7 @@ private boolean dmgCheck(double dmg, double self) { private double getDmg(BlockPos pos) { double highest = -1; for (PlayerEntity target : targets) { - highest = Math.max(highest, BODamageUtils.anchorDamage(target, target.getBoundingBox(), pos)); + highest = Math.max(highest, BODamageUtils.anchorDamage(target, target.getBoundingBox(), pos.toCenterPos(), pos, true)); } return highest; } diff --git a/src/main/java/kassuk/addon/blackout/modules/AnchorAuraRewrite.java b/src/main/java/kassuk/addon/blackout/modules/AnchorAuraRewrite.java index 9d38d94..f25a7f6 100644 --- a/src/main/java/kassuk/addon/blackout/modules/AnchorAuraRewrite.java +++ b/src/main/java/kassuk/addon/blackout/modules/AnchorAuraRewrite.java @@ -544,7 +544,7 @@ private void getDmg(BlockPos pos) { self = -1; targets.forEach(target -> { - double d = BODamageUtils.anchorDamage(target, extMap.containsKey(target) ? extMap.get(target) : target.getBoundingBox(), pos); + double d = BODamageUtils.anchorDamage(target, extMap.containsKey(target) ? extMap.get(target) : target.getBoundingBox(), pos.toCenterPos(), pos, true); if (target == mc.player) self = Math.max(self, d); else if (Friends.get().isFriend(target)) friend = Math.max(friend, d); diff --git a/src/main/java/kassuk/addon/blackout/modules/AutoCrystalPlus.java b/src/main/java/kassuk/addon/blackout/modules/AutoCrystalPlus.java index 0c218bb..93169e8 100644 --- a/src/main/java/kassuk/addon/blackout/modules/AutoCrystalPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/AutoCrystalPlus.java @@ -1375,7 +1375,7 @@ private boolean isOwn(BlockPos pos) { } private double[][] getDmg(Vec3d vec, boolean attack) { - double self = BODamageUtils.crystal(mc.player, extPos.containsKey(mc.player) ? extPos.get(mc.player) : mc.player.getBoundingBox(), vec, ignorePos(attack), ignoreTerrain.get()); + double self = BODamageUtils.crystalDamage(mc.player, extPos.containsKey(mc.player) ? extPos.get(mc.player) : mc.player.getBoundingBox(), vec, ignorePos(attack), ignoreTerrain.get()); if (suicide) return new double[][]{new double[]{self, -1, -1}, new double[]{20, 20}}; @@ -1388,7 +1388,7 @@ private double[][] getDmg(Vec3d vec, boolean attack) { Box box = entry.getValue(); if (player.getHealth() <= 0 || player == mc.player) continue; - double dmg = BODamageUtils.crystal(player, box, vec, ignorePos(attack), ignoreTerrain.get()); + double dmg = BODamageUtils.crystalDamage(player, box, vec, ignorePos(attack), ignoreTerrain.get()); if (BlockPos.ofFloored(vec).down().equals(autoMine.targetPos())) dmg *= autoMineDamage.get(); double hp = player.getHealth() + player.getAbsorptionAmount(); diff --git a/src/main/java/kassuk/addon/blackout/modules/AutoMine.java b/src/main/java/kassuk/addon/blackout/modules/AutoMine.java index afa1b96..24d3c11 100644 --- a/src/main/java/kassuk/addon/blackout/modules/AutoMine.java +++ b/src/main/java/kassuk/addon/blackout/modules/AutoMine.java @@ -1092,7 +1092,7 @@ private float getSpeed(BlockState state, int slot, boolean speedMod) { ItemStack stack = mc.player.getInventory().getStack(slot); float f = mc.player.getInventory().getStack(slot).getMiningSpeedMultiplier(state); if (f > 1.0) { - int i = EnchantmentHelper.getLevel(Enchantments.EFFICIENCY, stack); + int i = OLEPOSSUtils.getLevel(Enchantments.EFFICIENCY, stack); if (i > 0 && !stack.isEmpty()) f += (float) (i * i + 1); } @@ -1101,19 +1101,19 @@ private float getSpeed(BlockState state, int slot, boolean speedMod) { if (effectCheck.get()) { if (StatusEffectUtil.hasHaste(mc.player)) { - f *= 1.0 + (float) (StatusEffectUtil.getHasteAmplifier(mc.player) + 1) * 0.2F; + f *= 1.0f + (StatusEffectUtil.getHasteAmplifier(mc.player) + 1) * 0.2F; } if (mc.player.hasStatusEffect(StatusEffects.MINING_FATIGUE)) { - f *= Math.pow(0.3, mc.player.getStatusEffect(StatusEffects.MINING_FATIGUE).getAmplifier() + 1); + f *= (float) Math.pow(0.3f, mc.player.getStatusEffect(StatusEffects.MINING_FATIGUE).getAmplifier() + 1); } } - if (waterCheck.get() && mc.player.isSubmergedInWater() && !EnchantmentHelper.hasAquaAffinity(mc.player)) { - f /= 5.0; + if (waterCheck.get() && mc.player.isSubmergedInWater() && !OLEPOSSUtils.hasAquaAffinity(mc.player)) { + f /= 5.0f; } if (onGroundCheck.get() && !mc.player.isOnGround()) { - f /= 5.0; + f /= 5.0f; } return f; diff --git a/src/main/java/kassuk/addon/blackout/modules/AutoPvp.java b/src/main/java/kassuk/addon/blackout/modules/AutoPvp.java index 30f10ae..012ff96 100644 --- a/src/main/java/kassuk/addon/blackout/modules/AutoPvp.java +++ b/src/main/java/kassuk/addon/blackout/modules/AutoPvp.java @@ -24,13 +24,14 @@ import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; import net.minecraft.client.gui.screen.DeathScreen; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.PotionContentsComponent; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket; -import net.minecraft.potion.PotionUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -498,12 +499,9 @@ private boolean available(Predicate predicate) { } private boolean isSpeed(ItemStack stack) { - for (Object instance : PotionUtil.getPotionEffects(stack).toArray()) { - StatusEffectInstance i = (StatusEffectInstance) instance; - - if (i.getEffectType() == StatusEffects.SPEED) { + for (StatusEffectInstance instance : stack.getOrDefault(DataComponentTypes.POTION_CONTENTS, PotionContentsComponent.DEFAULT).getEffects()) { + if (instance.getEffectType() == StatusEffects.SPEED) return true; - } } return false; } diff --git a/src/main/java/kassuk/addon/blackout/modules/BedAuraPlus.java b/src/main/java/kassuk/addon/blackout/modules/BedAuraPlus.java index 44c00c8..637cfa1 100644 --- a/src/main/java/kassuk/addon/blackout/modules/BedAuraPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/BedAuraPlus.java @@ -699,7 +699,7 @@ private boolean dmgCheck() { private double getDmg(BlockPos pos) { double highest = -1; for (PlayerEntity target : targets) { - highest = Math.max(highest, BODamageUtils.bedDamage(target, target.getBoundingBox(), new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), null)); + highest = Math.max(highest, BODamageUtils.anchorDamage(target, target.getBoundingBox(), pos.toCenterPos(), pos, false)); } return highest; } @@ -711,14 +711,14 @@ private void damageCalc(BlockPos pos) { for (PlayerEntity target : targets) { if (target.getHealth() <= 0) continue; - highest = Math.max(highest, BODamageUtils.bedDamage(target, target.getBoundingBox(), new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), null)); + highest = Math.max(highest, BODamageUtils.anchorDamage(target, target.getBoundingBox(), pos.toCenterPos(), pos, true)); highestHP = target.getHealth() + target.getAbsorptionAmount(); } dmg = highest; enemyHP = highestHP; // Self - self = BODamageUtils.bedDamage(mc.player, mc.player.getBoundingBox(), new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), null); + self = BODamageUtils.anchorDamage(mc.player, mc.player.getBoundingBox(), pos.toCenterPos(), pos, false); selfHP = mc.player.getHealth() + mc.player.getAbsorptionAmount(); // Friend @@ -727,7 +727,7 @@ private void damageCalc(BlockPos pos) { for (PlayerEntity friend : friends) { if (friend.getHealth() <= 0) continue; - highest = Math.max(highest, BODamageUtils.bedDamage(friend, friend.getBoundingBox(), new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), null)); + highest = Math.max(highest, BODamageUtils.anchorDamage(friend, friend.getBoundingBox(), pos.toCenterPos(), pos, true)); highestHP = friend.getHealth() + friend.getAbsorptionAmount(); } friend = highest; diff --git a/src/main/java/kassuk/addon/blackout/modules/Blocker.java b/src/main/java/kassuk/addon/blackout/modules/Blocker.java index 067abc9..c836b9a 100644 --- a/src/main/java/kassuk/addon/blackout/modules/Blocker.java +++ b/src/main/java/kassuk/addon/blackout/modules/Blocker.java @@ -448,7 +448,7 @@ private Entity getBlocking() { for (BlockPos pos : placePositions) { if (!Box.from(new BlockBox(pos)).intersects(entity.getBoundingBox())) continue; - double dmg = BODamageUtils.crystal(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false); + double dmg = BODamageUtils.crystalDamage(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false); if (dmg < lowest) { crystal = entity; lowest = dmg; @@ -639,7 +639,7 @@ private boolean damageCheck(BlockPos blockPos, int type) { if (!(mc.world.getBlockState(pos).getBlock() instanceof AirBlock)) continue; if (oldVer.get() && !(mc.world.getBlockState(pos.up()).getBlock() instanceof AirBlock)) continue; - double self = BODamageUtils.crystal(mc.player, mc.player.getBoundingBox(), feet(pos), blockPos, true); + double self = BODamageUtils.crystalDamage(mc.player, mc.player.getBoundingBox(), feet(pos), blockPos, true); if (self >= maxDmg.get()) return true; } } @@ -649,7 +649,7 @@ private boolean damageCheck(BlockPos blockPos, int type) { if (!(mc.world.getBlockState(blockPos).getBlock() instanceof AirBlock)) return false; if (oldVer.get() && !(mc.world.getBlockState(blockPos.up()).getBlock() instanceof AirBlock)) return false; - double self = BODamageUtils.crystal(mc.player, mc.player.getBoundingBox(), feet(blockPos.up()), blockPos, true); + double self = BODamageUtils.crystalDamage(mc.player, mc.player.getBoundingBox(), feet(blockPos.up()), blockPos, true); if (self >= maxDmg.get()) return true; } } diff --git a/src/main/java/kassuk/addon/blackout/modules/ElytraFlyPlus.java b/src/main/java/kassuk/addon/blackout/modules/ElytraFlyPlus.java index 192b4e3..f7cb3a6 100644 --- a/src/main/java/kassuk/addon/blackout/modules/ElytraFlyPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/ElytraFlyPlus.java @@ -2,11 +2,16 @@ import kassuk.addon.blackout.BlackOut; import kassuk.addon.blackout.BlackOutModule; +import kassuk.addon.blackout.managers.Managers; import meteordevelopment.meteorclient.events.entity.player.PlayerMoveEvent; import meteordevelopment.meteorclient.mixininterface.IVec3d; import meteordevelopment.meteorclient.settings.*; +import meteordevelopment.meteorclient.utils.player.ChatUtils; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; +import net.minecraft.text.Text; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; /** * @author OLEPOSSU @@ -28,6 +33,20 @@ public ElytraFlyPlus() { .build() ); + private final Setting stopWater = sgGeneral.add(new BoolSetting.Builder() + .name("Stop Water") + .description("Doesn't modify movement while in water.") + .defaultValue(true) + .build() + ); + + private final Setting stopLava = sgGeneral.add(new BoolSetting.Builder() + .name("Stop Lava") + .description("Doesn't modify movement while in lava.") + .defaultValue(true) + .build() + ); + //--------------------Speed--------------------// private final Setting horizontal = sgSpeed.add(new DoubleSetting.Builder() .name("Horizontal Speed") @@ -38,6 +57,7 @@ public ElytraFlyPlus() { .visible(() -> mode.get() == Mode.Wasp) .build() ); + private final Setting up = sgSpeed.add(new DoubleSetting.Builder() .name("Up Speed") .description("How many blocks to move up each tick.") @@ -47,6 +67,7 @@ public ElytraFlyPlus() { .visible(() -> mode.get() == Mode.Wasp) .build() ); + private final Setting speed = sgSpeed.add(new DoubleSetting.Builder() .name("Speed") .description("How many blocks to move each tick.") @@ -56,6 +77,7 @@ public ElytraFlyPlus() { .visible(() -> mode.get() == Mode.Control) .build() ); + private final Setting upMultiplier = sgSpeed.add(new DoubleSetting.Builder() .name("Up Multiplier") .description("How many times faster should we fly up.") @@ -65,14 +87,17 @@ public ElytraFlyPlus() { .visible(() -> mode.get() == Mode.Control) .build() ); + private final Setting down = sgSpeed.add(new DoubleSetting.Builder() .name("Down Speed") .description("How many blocks to move down each tick.") .defaultValue(1) .min(0) .sliderRange(0, 5) + .visible(() -> mode.get() == Mode.Control || mode.get() == Mode.Wasp) .build() ); + private final Setting smartFall = sgSpeed.add(new BoolSetting.Builder() .name("Smart Fall") .description("Only falls down when looking down.") @@ -80,12 +105,42 @@ public ElytraFlyPlus() { .visible(() -> mode.get() == Mode.Wasp) .build() ); + private final Setting fallSpeed = sgSpeed.add(new DoubleSetting.Builder() .name("Fall Speed") .description("How many blocks to fall down each tick.") .defaultValue(0.01) .min(0) .sliderRange(0, 1) + .visible(() -> mode.get() == Mode.Control || mode.get() == Mode.Wasp) + .build() + ); + + private final Setting constSpeed = sgSpeed.add(new DoubleSetting.Builder() + .name("Const Speed") + .description("Maximum speed for constantiam mode.") + .defaultValue(1) + .min(0) + .sliderRange(0, 5) + .visible(() -> mode.get() == Mode.Constantiam) + .build() + ); + + private final Setting constAcceleration = sgSpeed.add(new DoubleSetting.Builder() + .name("Const Acceleration") + .description("Maximum speed for constantiam mode.") + .defaultValue(1) + .min(0) + .sliderRange(0, 5) + .visible(() -> mode.get() == Mode.Constantiam) + .build() + ); + + private final Setting constStop = sgSpeed.add(new BoolSetting.Builder() + .name("Const Stop") + .description("Stops movement when no input.") + .defaultValue(true) + .visible(() -> mode.get() == Mode.Constantiam) .build() ); @@ -94,18 +149,58 @@ public ElytraFlyPlus() { private float pitch; private float p; private double velocity; + private int activeFor; @EventHandler(priority = EventPriority.HIGHEST) private void onMove(PlayerMoveEvent event) { + if (!active()) return; + + activeFor++; + if (activeFor < 5) return; + switch (mode.get()) { case Wasp -> waspTick(event); case Control -> controlTick(event); + case Constantiam -> constantiamTick(event); + } + } + + private void constantiamTick(PlayerMoveEvent event) { + Vec3d motion = getMotion(mc.player.getVelocity()); + if (motion != null) { + ((IVec3d) event.movement).set(motion.getX(), motion.getY(), motion.getZ()); + event.movement = motion; + } + } + + private Vec3d getMotion(Vec3d velocity) { + if (mc.player.input.movementForward == 0) { + if (constStop.get()) return new Vec3d(0, 0, 0); + return null; } + + boolean forward = mc.player.input.movementForward > 0; + + double yaw = Math.toRadians(mc.player.getYaw() + (forward ? 90 : -90)); + + double x = Math.cos(yaw); + double z = Math.sin(yaw); + double maxAcc = calcAcceleration(velocity.x, velocity.z, x, z); + double delta = Math.clamp(MathHelper.getLerpProgress(velocity.horizontalLength(), 0, 0.5), 0, 1); + + double acc = Math.min(maxAcc, constAcceleration.get() / 20 * (0.1 + delta * 0.9)); + return new Vec3d(velocity.getX() + x * acc, velocity.getY(), velocity.getZ() + z * acc); + } + + private double calcAcceleration(double vx, double vz, double x, double z) { + // crazy mathing + double xz = x * x + z * z; + return (Math.sqrt(xz * constSpeed.get() * constSpeed.get() - x * x * vz * vz - z * z * vx * vx + 2 * x * z * vx * vz) - x * vx - z * vz) / xz; } // Wasp private void waspTick(PlayerMoveEvent event) { - if (!mc.player.isFallFlying()) {return;} + if (!mc.player.isFallFlying()) return; updateWaspMovement(); pitch = mc.player.getPitch(); @@ -210,8 +305,21 @@ private void updateControlMovement() { this.yaw = yaw; } + public boolean active() { + if (stopWater.get() && mc.player.isTouchingWater()) { + activeFor = 0; + return false; + } + if (stopLava.get() && mc.player.isInLava()) { + activeFor = 0; + return false; + } + return mc.player.isFallFlying(); + } + public enum Mode { Wasp, - Control + Control, + Constantiam } } diff --git a/src/main/java/kassuk/addon/blackout/modules/FeetESP.java b/src/main/java/kassuk/addon/blackout/modules/FeetESP.java index c06bfd1..1264911 100644 --- a/src/main/java/kassuk/addon/blackout/modules/FeetESP.java +++ b/src/main/java/kassuk/addon/blackout/modules/FeetESP.java @@ -79,10 +79,11 @@ private void onRender(Render3DEvent event) { if (!other.get() && player != mc.player && !Friends.get().isFriend(player)) return; if (!self.get() && mc.player == player) return; + float tickDelta = mc.getRenderTickCounter().getTickDelta(true); render(event, new Vec3d( - MathHelper.lerp(mc.getTickDelta(), player.prevX, player.getX()), - MathHelper.lerp(mc.getTickDelta(), player.prevY, player.getY()), - MathHelper.lerp(mc.getTickDelta(), player.prevZ, player.getZ()) + MathHelper.lerp(tickDelta, player.prevX, player.getX()), + MathHelper.lerp(tickDelta, player.prevY, player.getY()), + MathHelper.lerp(tickDelta, player.prevZ, player.getZ()) )); }); } diff --git a/src/main/java/kassuk/addon/blackout/modules/KillAuraPlus.java b/src/main/java/kassuk/addon/blackout/modules/KillAuraPlus.java index 00b245e..f9ff7c9 100644 --- a/src/main/java/kassuk/addon/blackout/modules/KillAuraPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/KillAuraPlus.java @@ -14,6 +14,7 @@ import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.friends.Friends; +import meteordevelopment.meteorclient.utils.entity.DamageUtils; import meteordevelopment.meteorclient.utils.player.InvUtils; import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.orbit.EventHandler; @@ -198,7 +199,7 @@ private int bestSlot(boolean inventory) { continue; } - dmg = BODamageUtils.getSwordDamage(stack, mc.player, target, true); + dmg = DamageUtils.getAttackDamage(mc.player, target, stack); if (dmg > hDmg) { slot = i; hDmg = dmg; diff --git a/src/main/java/kassuk/addon/blackout/modules/PacketLogger.java b/src/main/java/kassuk/addon/blackout/modules/PacketLogger.java index 6fa5b2a..d120d9c 100644 --- a/src/main/java/kassuk/addon/blackout/modules/PacketLogger.java +++ b/src/main/java/kassuk/addon/blackout/modules/PacketLogger.java @@ -4,6 +4,7 @@ import kassuk.addon.blackout.BlackOut; import kassuk.addon.blackout.BlackOutModule; import kassuk.addon.blackout.mixins.*; +import kassuk.addon.blackout.utils.PacketNames; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.settings.PacketListSetting; import meteordevelopment.meteorclient.settings.Setting; @@ -92,268 +93,7 @@ private void log(String string) { // this was not fun private String packetMessage(Packet packet) { - //----------SEND----------// - - if (packet instanceof ClientOptionsC2SPacket p) return "ClientOptions language:" + p.options().language() + " allowsServerListing:" + p.options().allowsServerListing() + " chatColorsEnabled:" + p.options().chatColorsEnabled() + " chatVisibility:" + p.options().chatVisibility().name() + " filtersText:" + p.options().filtersText() + " mainArm:" + p.options().mainArm().name() + " playerModelParts:" + p.options().playerModelParts() + " viewDistance:" + p.options().viewDistance(); - if (packet instanceof CommonPongC2SPacket p) return "CommonPong parameter:" + p.getParameter(); -// TODO if (packet instanceof CustomPayloadC2SPacket p) return "CustomPayload data:" + p.getData() + " channel:" + p.payload().id(); - if (packet instanceof KeepAliveC2SPacket p) return "KeepAlive id:" + p.getId(); - if (packet instanceof ResourcePackStatusC2SPacket p) return "ResourcePackStatus status:" + p.status().name() + " id:" + p.id().toString(); - - if (packet instanceof ReadyC2SPacket p) return "Ready state:" + (p.getNewNetworkState() == null ? "null" : p.getNewNetworkState().name()); - - if (packet instanceof HandshakeC2SPacket p) return "Handshake state:" + p.intendedState().name() + " address:" + p.address() + " protocol:" + p.protocolVersion(); - - if (packet instanceof EnterConfigurationC2SPacket p) return "EnterConfiguration state:" + (p.getNewNetworkState() == null ? "null" : p.getNewNetworkState().name()); - if (packet instanceof LoginHelloC2SPacket p) return "LoginHello id:" + p.profileId() + " name:" + p.name(); - if (packet instanceof LoginKeyC2SPacket) return "LoginKey"; - if (packet instanceof LoginQueryResponseC2SPacket p) return "LoginQueryResponse id:" + p.queryId(); - - if (packet instanceof AcknowledgeChunksC2SPacket p) return "AcknowledgeChunks state:" + p.getNewNetworkState() + " desired chunks per tick:" + p.desiredChunksPerTick(); - if (packet instanceof AcknowledgeReconfigurationC2SPacket p) return "AcknowledgeReconfiguration state:" + p.getNewNetworkState(); - if (packet instanceof AdvancementTabC2SPacket p) return "AdvancementTab action:" + p.getAction() + " toOpen:" + p.getTabToOpen(); - if (packet instanceof BoatPaddleStateC2SPacket p) return "BoatPaddle isLeftPadling:" + p.isLeftPaddling() + " isRightPaddling:" + p.isRightPaddling(); - if (packet instanceof BookUpdateC2SPacket p) return "BookUpdate slot:" + p.getSlot() + " pages:" + p.getPages().size() + " title:" + p.getTitle(); - if (packet instanceof ButtonClickC2SPacket p) return "ButtonClick button:" + p.getButtonId() + " syncId" + p.getSyncId(); - if (packet instanceof ChatMessageC2SPacket p) return "ChatMessage message:" + p.chatMessage(); - if (packet instanceof ClickSlotC2SPacket p) return "ClickSlot syncId:" + p.getSyncId() + " slot:" + p.getSlot() + " button:" + p.getButton() + " action:" + p.getActionType().name() + " revision" + p.getRevision() + " item:" + p.getStack().getItem() + " count:" + p.getStack().getCount(); - if (packet instanceof ClientCommandC2SPacket p) return "ClientCommand entityId:" + p.getEntityId() + " jumpHeight" + p.getMountJumpHeight() + " mode" + p.getMode().name(); - if (packet instanceof ClientStatusC2SPacket p) return "ClientStatus mode:" + p.getMode().name(); - if (packet instanceof CloseHandledScreenC2SPacket p) return "CloseHandledScreen syncId:" + p.getSyncId(); - if (packet instanceof CommandExecutionC2SPacket p) return "CommandExecution command:" + p.command() + " salt:" + p.salt(); - if (packet instanceof CraftRequestC2SPacket p) return "CraftRequest syncId:" + p.getSyncId() + " craftAll:" + p.shouldCraftAll() + " recipe:" + p.getRecipe(); - if (packet instanceof CreativeInventoryActionC2SPacket p) return "CreativeInventoryAction slot:" + p.getSlot() + " item:" + p.getStack().getItem() + " count:" + p.getStack().getCount(); - if (packet instanceof HandSwingC2SPacket p) return "HandSwing hand:" + p.getHand().name(); - if (packet instanceof JigsawGeneratingC2SPacket p) return "JigsawGeneration x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " maxDepth" + p.getMaxDepth() + " shouldKeepJigsaws:" + p.shouldKeepJigsaws(); - if (packet instanceof MessageAcknowledgmentC2SPacket p) return "MessageAcknowledgment offset:" + p.offset(); - if (packet instanceof PickFromInventoryC2SPacket p) return "PickFromInventory slot:" + p.getSlot(); - if (packet instanceof PlayerActionC2SPacket p) return "PlayerAction action:" + p.getAction() + " x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " dir:" + p.getDirection().name() + " sequence:" + p.getSequence(); - if (packet instanceof PlayerInputC2SPacket p) return "PlayerInput forward:" + p.getForward() + " sideways:" + p.getSideways() + " sneaking:" + p.isSneaking() + " jumping:" + p.isJumping(); - if (packet instanceof PlayerInteractBlockC2SPacket p) return "PlayerInteractBlock type:" + p.getBlockHitResult().getType().name() + " blockX:" + p.getBlockHitResult().getBlockPos().getX() + " blockY:" + p.getBlockHitResult().getBlockPos().getY() + " blockZ:" + p.getBlockHitResult().getBlockPos().getZ() + " x:" + p.getBlockHitResult().getPos().getX() + " y:" + p.getBlockHitResult().getPos().getY() + " z:" + p.getBlockHitResult().getPos().getZ() + " side:" + p.getBlockHitResult().getSide().name() + " inside:" + p.getBlockHitResult().isInsideBlock() + " hand:" + p.getHand().name() + " sequence:" + p.getSequence(); - if (packet instanceof PlayerInteractEntityC2SPacket p) return "PlayerInteractEntity id:" + ((IInteractEntityC2SPacket) p).getId(); - if (packet instanceof PlayerInteractItemC2SPacket p) return "PlayerInteractItem hand:" + p.getHand() + " sequence:" + p.getSequence(); - if (packet instanceof PlayerMoveC2SPacket.Full p) return "PlayerMove.Full x:" + p.getX(0) + " y:" + p.getY(0) + " z:" + p.getZ(0) + " yaw:" + p.getYaw(0) + " pitch:" + p.getPitch(0) + " ground:" + p.isOnGround(); - if (packet instanceof PlayerMoveC2SPacket.PositionAndOnGround p) return "PlayerMove.Pos x:" + p.getX(0) + " y:" + p.getY(0) + " z:" + p.getZ(0) + " ground:" + p.isOnGround(); - if (packet instanceof PlayerMoveC2SPacket.LookAndOnGround p) return "PlayerMove.Look yaw:" + p.getYaw(0) + " pitch:" + p.getPitch(0) + " ground:" + p.isOnGround(); - if (packet instanceof PlayerMoveC2SPacket.OnGroundOnly p) return "PlayerMove.Ground ground:" + p.isOnGround(); - if (packet instanceof PlayerSessionC2SPacket p) return "PlayerSession sessionId:" + p.chatSession().sessionId(); - if (packet instanceof QueryBlockNbtC2SPacket p) return "QueryBlockNbt x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " transactionId:" + p.getTransactionId(); - if (packet instanceof QueryEntityNbtC2SPacket p) return "QueryEntityNbt entityId" + p.getEntityId() + " transactionId" + p.getTransactionId(); - if (packet instanceof RecipeBookDataC2SPacket p) return "RecipeBookData identifier:" + p.getRecipeId(); - if (packet instanceof RecipeCategoryOptionsC2SPacket p) return "RecipeCategoryOptions guiOpen:" + p.isGuiOpen() + " filtering:" + p.isFilteringCraftable() + " category:" + p.getCategory().name(); - if (packet instanceof RenameItemC2SPacket p) return "RenameItem name:" + p.getName(); - if (packet instanceof RequestCommandCompletionsC2SPacket p) return "RequestCommandCompletions partialCommand:" + p.getPartialCommand() + " completionId:" + p.getCompletionId(); - if (packet instanceof SelectMerchantTradeC2SPacket p) return "SelectMerchantTrade tradeId:" + p.getTradeId(); - if (packet instanceof SlotChangedStateC2SPacket p) return "SlotChangedState newState:" + p.newState() + " slot:" + p.slotId(); - if (packet instanceof SpectatorTeleportC2SPacket p) return "SpectatorTeleport UUID:" + ((ISpectatorTeleportC2SPacket) p).getID(); - if (packet instanceof TeleportConfirmC2SPacket p) return "TeleportConfirm id:" + p.getTeleportId(); - if (packet instanceof UpdateBeaconC2SPacket p) return "UpdateBeacon primary:" + (p.getPrimaryEffectId().isPresent() ? p.getPrimaryEffectId().get().getName() : "null") + (p.getSecondaryEffectId().isPresent() ? p.getSecondaryEffectId().get().getName() : "null"); - if (packet instanceof UpdateCommandBlockC2SPacket p) return "UpdateCommandBlock x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " command:" + p.getCommand() + " type:" + p.getType().name() + " alwaysActive:" + p.isAlwaysActive() + " conditional:" + p.isConditional() + " trackOutput:" + p.shouldTrackOutput(); - if (packet instanceof UpdateCommandBlockMinecartC2SPacket p) return "UpdateCommandBlockMinecart command:" + p.getCommand() + " trackOutput:" + p.shouldTrackOutput(); - if (packet instanceof UpdateDifficultyC2SPacket p) return "UpdateDifficulty difficulty:" + p.getDifficulty().name(); - if (packet instanceof UpdateDifficultyLockC2SPacket p) return "UpdateDifficultyLock locked:" + p.isDifficultyLocked(); - if (packet instanceof UpdateJigsawC2SPacket p) return "UpdateJigsaw x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " name:" + p.getName() + " finalState:" + p.getFinalState() + " joint:" + p.getJointType().name() + " pool:" + p.getPool() + " target:" + p.getTarget(); - if (packet instanceof UpdatePlayerAbilitiesC2SPacket p) return "UpdatePlayerAbilities flying:" + p.isFlying(); - if (packet instanceof UpdateSelectedSlotC2SPacket p) return "UpdateSelectedSlot slot:" + p.getSelectedSlot(); - if (packet instanceof UpdateSignC2SPacket p) return "UpdateSign x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " text:[\n" + signText(p.getText()) + " front:" + p.isFront() + "]"; - if (packet instanceof UpdateStructureBlockC2SPacket p) return "UpdateStructureBlock x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " action" + p.getAction().name() + " tName:" + p.getTemplateName() + " mode:" + p.getMode().name() + " metadata:" + p.getMetadata() + " integrity:" + p.getIntegrity() + " mirror:" + p.getMirror().name() + " offsetX:" + p.getOffset().getX() + " offsetY:" + p.getOffset().getY() + " offsetZ:" + p.getOffset().getZ() + " rotation:" + p.getRotation().name() + " seed:" + p.getSeed() + " sizeX:" + p.getSize().getX() + " sizeY:" + p.getSize().getY() + " sizeZ:" + p.getSize().getZ() + " ignoreEntities:" + p.shouldIgnoreEntities() + " showAir:" + p.shouldShowAir() + " showBoundingBox:" + p.shouldShowBoundingBox(); - if (packet instanceof VehicleMoveC2SPacket p) return "VehicleMove x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch(); - - if (packet instanceof QueryPingC2SPacket p) return "QueryPing startTime:" + p.getStartTime(); - if (packet instanceof QueryRequestC2SPacket) return "QueryRequest"; - - //----------Receive----------// - if (packet instanceof CommonPingS2CPacket p) return "PlayPing parameter:" + p.getParameter(); - if (packet instanceof CustomPayloadS2CPacket p) return "CustomPayload channel:" + p.payload().id(); - if (packet instanceof DisconnectS2CPacket p) return "Disconnect reason:" + p.getReason().getString(); - if (packet instanceof KeepAliveS2CPacket p) return "KeepAlive id:" + p.getId(); - if (packet instanceof ResourcePackSendS2CPacket p) return "ResourcePackSend URL:" + p.url() + " hash:" + p.hash() + " prompt:" + p.prompt() + " required:" + p.required() + " id:" + p.id(); - if (packet instanceof SynchronizeTagsS2CPacket) return "SynchronizeTags"; - - if (packet instanceof DynamicRegistriesS2CPacket p) return "DynamicRegistries manager:" + p.registryManager(); - if (packet instanceof FeaturesS2CPacket p) return "Features featureCount:" + p.features().size(); - if (packet instanceof ReadyS2CPacket p) return "Ready state:" + (p.getNewNetworkState() == null ? "null" : p.getNewNetworkState().name()); - - if (packet instanceof LoginCompressionS2CPacket p) return "LoginCompression compressionThreshold:" + p.getCompressionThreshold(); - if (packet instanceof LoginDisconnectS2CPacket p) return "LoginDisconnect reason:" + p.getReason(); - if (packet instanceof LoginHelloS2CPacket p) return "LoginHello serverId:" + p.getServerId(); - if (packet instanceof LoginQueryRequestS2CPacket p) return "LoginQueryRequest id:" + p.queryId() + " channel:" + p.payload().id(); - if (packet instanceof LoginSuccessS2CPacket p) return "LoginSuccess name:" + p.getProfile().getName() + " UUID:" + p.getProfile().getId(); - - if (packet instanceof AdvancementUpdateS2CPacket p) return "AdvancementUpdate shouldClear:" + p.shouldClearCurrent(); - if (packet instanceof BlockBreakingProgressS2CPacket p) return "BlockBreakingProgress x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " entityId:" + p.getEntityId() + " progress:" + p.getProgress(); - if (packet instanceof BlockEntityUpdateS2CPacket p) return "BlockEntityUpdate type:" + p.getBlockEntityType() + " x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ(); - if (packet instanceof BlockEventS2CPacket p) return "BlockEvent x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " block:" + p.getBlock().getName() + " type:" + p.getType() + " data:" + p.getData(); - if (packet instanceof BlockUpdateS2CPacket p) return "BlockUpdate x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " block:" + p.getState().getBlock(); - if (packet instanceof BossBarS2CPacket) return "BossBar"; - if (packet instanceof BundleS2CPacket) return "PacketBundle"; - if (packet instanceof ChatMessageS2CPacket p) return "ChatMessage message:" + p.unsignedContent() + " sender:" + p.sender() + " index:" + p.index(); - if (packet instanceof ChatSuggestionsS2CPacket p) return "ChatSuggestions action:" + p.action().name() + " entries:[\n" + merge(p.entries()) + "]"; - if (packet instanceof ChunkBiomeDataS2CPacket p) return "ChunkBiomeData size:" + p.chunkBiomeData().size(); - if (packet instanceof ChunkDataS2CPacket p) return "ChunkData x:" + p.getChunkX() + " z:" + p.getChunkZ(); - if (packet instanceof ChunkDeltaUpdateS2CPacket) return "ChunkDeltaUpdate"; - if (packet instanceof ChunkLoadDistanceS2CPacket p) return "ChunkLoadDistance distance:" + p.getDistance(); - if (packet instanceof ChunkRenderDistanceCenterS2CPacket p) return "ChunkRenderDistanceCenter x:" + p.getChunkX() + " z:" + p.getChunkZ(); - if (packet instanceof ChunkSentS2CPacket p) return "ChunkSent batchSize:" + p.batchSize(); - if (packet instanceof ClearTitleS2CPacket p) return "ClearTitle shouldReset:" + p.shouldReset(); - if (packet instanceof CloseScreenS2CPacket p) return "CloseScreen syncId" + p.getSyncId(); - if (packet instanceof CommandSuggestionsS2CPacket p) return "CommandSuggestions completionId:" + p.getCompletionId() + " suggestions:[\n" + mergeSuggestions(p.getSuggestions().getList()) + "]"; - if (packet instanceof CommandTreeS2CPacket) return "CommandTree"; - if (packet instanceof CooldownUpdateS2CPacket p) return "CooldownUpdate item:" + p.getItem() + " cooldown:" + p.getCooldown(); - if (packet instanceof CraftFailedResponseS2CPacket p) return "CraftFailedResponse syncId:" + p.getSyncId() + " recipeId:" + p.getRecipeId(); - if (packet instanceof DamageTiltS2CPacket p) return "DamageTilt yaw:" + p.yaw() + " id:" + p.id(); - if (packet instanceof DeathMessageS2CPacket p) return "DeathMessage entityId:" + p.getEntityId() + " message:" + p.getMessage().getString(); - if (packet instanceof DifficultyS2CPacket p) return "Difficulty difficulty:" + p.getDifficulty().getName(); - if (packet instanceof EndCombatS2CPacket) return "EndCombat"; - if (packet instanceof EnterCombatS2CPacket) return "EnterCombat"; - if (packet instanceof EnterReconfigurationS2CPacket p) return "EnterReconfiguration state:" + (p.getNewNetworkState() == null ? "null" : p.getNewNetworkState().name()); - if (packet instanceof EntitiesDestroyS2CPacket p) return "EntitiesDestroy size:" + p.getEntityIds().size(); - if (packet instanceof EntityAnimationS2CPacket p) return "EntityAnimation id:" + p.getId() + " animationId:" + p.getAnimationId(); - if (packet instanceof EntityAttachS2CPacket p) return "EntityAttack attackedId:" + p.getAttachedEntityId() + " holdingId:" + p.getHoldingEntityId(); - if (packet instanceof EntityAttributesS2CPacket p) return "EntityAttributes entityId:" + p.getEntityId(); - if (packet instanceof EntityDamageS2CPacket p) return "EntityDamage entityId:" + p.entityId() + " causeId:" + p.sourceCauseId() + " directId:" + p.sourceDirectId() + " sourceType:" + p.sourceTypeId(); - if (packet instanceof EntityEquipmentUpdateS2CPacket p) return "EntityEquipment entityId:" + p.getId(); - if (packet instanceof EntityPassengersSetS2CPacket p) return "EntityPassengersSet entityId:" + p.getId() + mergeIds(p.getPassengerIds()); - if (packet instanceof EntityPositionS2CPacket p) return "EntityPosition id:" + p.getId() + " x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch() + " ground:" + p.isOnGround(); - if (packet instanceof EntityS2CPacket p) return "Entity id:" + ((IEntityS2CPacket) p).getId() + " deltaX:" + p.getDeltaX() + " deltaY:" + p.getDeltaY() + " deltaZ:" + p.getDeltaZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch() + " hasRotation:" + p.hasRotation() + " posChange:" + p.isPositionChanged() + " ground:" + p.isOnGround(); - if (packet instanceof EntitySetHeadYawS2CPacket p) return "EntitySetHeadYaw id:" + ((IEntitySetHeadYawS2CPacket) p).getId(); - if (packet instanceof EntitySpawnS2CPacket p) return "EntitySpawn id:" + p.getId() + " type:" + p.getEntityType() + " x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch() + " velX:" + p.getVelocityX() + " velY:" + p.getVelocityY() + " velZ:" + p.getVelocityZ() + " headYaw:" + p.getHeadYaw() + " UUID:" + p.getUuid() + " data:" + p.getEntityData(); - if (packet instanceof EntityStatusEffectS2CPacket p) return "EntityStatusEffect entityId:" + p.getEntityId() + " effect:" + p.getEffectId().getName() + " amplifier:" + p.getAmplifier() + " duration:" + p.getDuration() + " showIcon:" + p.shouldShowIcon() + " particles:" + p.shouldShowParticles() + " ambient:" + p.isAmbient(); - if (packet instanceof EntityStatusS2CPacket p) return "EntityStatus status:" + p.getStatus() + " id:" + ((IEntityStatusS2CPacket) p).getId(); - if (packet instanceof EntityTrackerUpdateS2CPacket p) return "EntityTrackerUpdate id:" + p.id() ; - if (packet instanceof EntityVelocityUpdateS2CPacket p) return "EntityVelocityUpdate id:" + p.getId() + " x:" + p.getVelocityX() + " y:" + p.getVelocityY() + " z:" + p.getVelocityZ(); - if (packet instanceof ExperienceBarUpdateS2CPacket p) return "ExperienceBarUpdate exp:" + p.getExperience() + " level" + p.getExperienceLevel() + " barProgress:" + p.getBarProgress(); - if (packet instanceof ExperienceOrbSpawnS2CPacket p) return "ExperienceOrbSpawn id:" + p.getId() + " x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " expAmount" + p.getExperience(); - if (packet instanceof ExplosionS2CPacket p) return "Explosion x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " radius:" + p.getRadius() + " playerVelX:" + p.getPlayerVelocityX() + " playerVelY:" + p.getPlayerVelocityY() + " playerVelZ:" + p.getPlayerVelocityZ(); - if (packet instanceof GameJoinS2CPacket p) return "GameJoin isDebug:" + p.commonPlayerSpawnInfo().isDebug() + " isFlat:" + p.commonPlayerSpawnInfo().isFlat() + " gameMode:" + p.commonPlayerSpawnInfo().gameMode().getName() + " viewDist:" + p.viewDistance() + " simulationDist:" + p.simulationDistance() + " dimensionsId:" + p.dimensionIds() + " hardcode:" + p.hardcore() + " ownId:" + p.playerEntityId() + " maxPlayers:" + p.maxPlayers() + " portalCooldown:" + p.commonPlayerSpawnInfo().portalCooldown() + " prevGameMode:" + p.commonPlayerSpawnInfo().prevGameMode().getName() + " showDeathScreen:" + p.showDeathScreen() + " reducedDebugInfo:" + p.reducedDebugInfo(); - if (packet instanceof GameMessageS2CPacket p) return "GameMessage content:" + p.content().getString(); - if (packet instanceof GameStateChangeS2CPacket p) return "GameStateChange val:" + p.getValue() + " reason:" + p.getReason(); - if (packet instanceof HealthUpdateS2CPacket p) return "HealthUpdate health:" + p.getHealth() + " food:" + p.getFood() + " saturation:" + p.getSaturation(); - if (packet instanceof InventoryS2CPacket p) return "Inventory syncId:" + p.getSyncId() + " revision:" + p.getRevision() + " contents:[\n" + listStacks(p.getContents()) + "]"; - if (packet instanceof ItemPickupAnimationS2CPacket p) return "ItemPickupAnimation id:" + p.getEntityId() + " collectorEntity:" + p.getCollectorEntityId() + " stackAmount:" + p.getStackAmount(); - if (packet instanceof LightUpdateS2CPacket p) return "LightUpdate chunkX:" + p.getChunkX() + " chunkZ:" + p.getChunkZ(); - if (packet instanceof LookAtS2CPacket) return "LookAt"; - if (packet instanceof MapUpdateS2CPacket p) return "MapUpdate id:" + p.getId() + " scale:" + p.getScale() + " locked:" + p.isLocked(); - if (packet instanceof NbtQueryResponseS2CPacket p) return "NbtQueryResponse transactionId:" + p.getTransactionId(); - if (packet instanceof OpenHorseScreenS2CPacket p) return "OpenHorseScreen horseId:" + p.getHorseId() + " syncId:" + p.getSyncId() + " slotCount:" + p.getSlotCount(); - if (packet instanceof OpenScreenS2CPacket p) return "OpenScreen name:" + p.getName().getString() + " syncId:" + p.getSyncId(); - if (packet instanceof OpenWrittenBookS2CPacket p) return "OpenWrittenBook hand:" + p.getHand().name(); - if (packet instanceof OverlayMessageS2CPacket p) return "OverlayMessage message:" + p.getMessage().getString(); - if (packet instanceof ParticleS2CPacket p) return "Particle x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " count:" + p.getCount() + " offsetX:" + p.getOffsetX() + " offsetY:" + p.getOffsetY() + " offsetZ:" + p.getOffsetZ() + " speed:" + p.getSpeed() + " parameters:" + p.getParameters().asString() + " longDist:" + p.isLongDistance(); - if (packet instanceof PlayerAbilitiesS2CPacket p) return "PlayerAbilities isFlying:" + p.isFlying() + " allowFlying:" + p.allowFlying() + " flySpeed:" + p.getFlySpeed() + " walkSpeed:" + p.getWalkSpeed() + " creative:" + p.isCreativeMode() + " invulnerable:" + p.isInvulnerable(); - if (packet instanceof PlayerActionResponseS2CPacket p) return "PlayerActionResponse sequence:" + p.sequence(); - if (packet instanceof PlayerListHeaderS2CPacket p) return "PlayerListHeader header:" + p.getHeader().getString() + " footer:" + p.getFooter().getString(); - if (packet instanceof PlayerListS2CPacket p) return "PlayerList actions:" + p.getActions().size() + " entries:" + p.getEntries() + " additionalEntries:" + p.getPlayerAdditionEntries().size(); - if (packet instanceof PlayerPositionLookS2CPacket p) return "PlayerPositionLook x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch() + " id:" + p.getTeleportId(); - if (packet instanceof PlayerRemoveS2CPacket p) return "PlayerRemove UUIDs:[\n" + listProfiles(p.profileIds()) + "]"; - if (packet instanceof PlayerRespawnS2CPacket p) return "PlayerRespawn gameMode:" + p.commonPlayerSpawnInfo().gameMode().getName() + " prevGameMode:" + p.commonPlayerSpawnInfo().prevGameMode().getName() + (p.commonPlayerSpawnInfo().lastDeathLocation().isEmpty() ? " " : " deathX:" + p.commonPlayerSpawnInfo().lastDeathLocation().get().getPos().getX() + " deathY:" + p.commonPlayerSpawnInfo().lastDeathLocation().get().getPos().getY() + " deathZ:" + p.commonPlayerSpawnInfo().lastDeathLocation().get().getPos().getZ()) + " portalCooldown:" + p.commonPlayerSpawnInfo().portalCooldown() + " isDebug:" + p.commonPlayerSpawnInfo().isDebug() + " isFlat:" + p.commonPlayerSpawnInfo().isFlat(); - if (packet instanceof PlayerSpawnPositionS2CPacket p) return "PlayerSpawnPosition x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " angle:" + p.getAngle(); - if (packet instanceof PlaySoundFromEntityS2CPacket p) return "PlaySoundFromEntity entityId:" + p.getEntityId() + " category:" + p.getCategory().getName() + " sound:" + p.getSound().getType().name() + " pitch:" + p.getPitch() + " volume:" + p.getVolume() + " seed:" + p.getSeed(); - if (packet instanceof PlaySoundS2CPacket p) return "PlaySound x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " category:" + p.getCategory() + " sound:" + p.getSound().getType().name() + " pitch:" + p.getPitch() + " volume:" + p.getVolume() + " seed:" + p.getSeed(); - if (packet instanceof ProfilelessChatMessageS2CPacket p) return "ProfilelessChatMessage message:" + p.message(); - if (packet instanceof RemoveEntityStatusEffectS2CPacket p) return "RemoveEntityStatusEffect effect:" + (p.getEffectType() == null ? "null" : p.getEffectType().getName()); - if (packet instanceof RemoveMessageS2CPacket p) return "RemoveMessage signature:" + p.messageSignature(); - if (packet instanceof ScoreboardDisplayS2CPacket p) return "ScoreboardDisplay name:" + p.getName() + " slot:" + p.getSlot(); - if (packet instanceof ScoreboardObjectiveUpdateS2CPacket p) return "ScoreboardObjectiveUpdate name:" + p.getName() + " type:" + p.getType() + " mode:" + p.getMode() + " displayName:" + p.getDisplayName(); - if (packet instanceof ScoreboardScoreResetS2CPacket p) return "ScoreboardScoreReset holder:" + p.scoreHolderName() + " objectiveName:" + p.objectiveName(); - if (packet instanceof ScoreboardScoreUpdateS2CPacket p) return "ScoreboardScoreUpdate holder:" + p.scoreHolderName() + " objectiveName:" + p.objectiveName() + " display:" + (p.display() == null ? "null" : p.display().getString()) + " numberFormat:" + p.numberFormat() + " score:" + p.score(); - if (packet instanceof ScreenHandlerPropertyUpdateS2CPacket p) return "ScreenHandlerPropertyUpdate syncId:" + p.getSyncId() + " propertyId:" + p.getPropertyId() + " value:" + p.getValue(); - if (packet instanceof ScreenHandlerSlotUpdateS2CPacket p) return "ScreenHandlerSlotUpdate syncId:" + p.getSyncId() + " slot:" + p.getSlot() + " item:" + p.getStack().getItem().getName() + " count:" + p.getStack().getCount() + " revision:" + p.getRevision(); - if (packet instanceof SelectAdvancementTabS2CPacket p) return "SelectAdvancementTab tabId:" + p.getTabId(); - if (packet instanceof ServerMetadataS2CPacket p) return "ServerMetadata description:" + p.getDescription() + " secureChat:" + p.isSecureChatEnforced(); - if (packet instanceof SetCameraEntityS2CPacket p) return "SetCameraEntity id:" + ((ISetCameraEntityS2CPacket) p).getId(); - if (packet instanceof SetTradeOffersS2CPacket p) return "SetTradeOffers syncId:" + p.getSyncId() + " experience:" + p.getExperience() + " levelProgress:" + p.getLevelProgress() + " leveled:" + p.isLeveled() + " isRefreshable:" + p.isRefreshable() + " offers: [\n" + offers(p.getOffers()) + "]"; - if (packet instanceof SignEditorOpenS2CPacket p) return "SignEditorOpen x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " front:" + p.isFront(); - if (packet instanceof SimulationDistanceS2CPacket p) return "SimulationDistance distance:" + p.simulationDistance(); - if (packet instanceof StartChunkSendS2CPacket) return "StartChunkSend"; - if (packet instanceof StatisticsS2CPacket p) return "Statistics" + stats(p.getStats()); - if (packet instanceof StopSoundS2CPacket p) return "StopSound soundId:" + p.getSoundId() + " category:" + (p.getCategory() == null ? "null" : p.getCategory().getName()); - if (packet instanceof SubtitleS2CPacket p) return "Subtitle subtitle:" + (p.getSubtitle() == null ? "null" : p.getSubtitle().getString()); - if (packet instanceof SynchronizeRecipesS2CPacket p) return "SynchronizeRecipes recipes:[\n" + recipes(p.getRecipes()) + "]"; - if (packet instanceof TeamS2CPacket p) return "Team teamName:" + p.getTeamName() + " names:[\n" + fromCollection(p.getPlayerNames()) + "]"; - if (packet instanceof TickStepS2CPacket p) return "TickStep steps:" + p.tickSteps(); - if (packet instanceof TitleFadeS2CPacket p) return "TitleFade fadeInTicks:" + p.getFadeInTicks() + " stayTicks:" + p.getStayTicks() + " fadeOutTicks:" + p.getFadeOutTicks(); - if (packet instanceof TitleS2CPacket p) return "Title title:" + (p.getTitle() == null ? "null" : p.getTitle().getString()); - if (packet instanceof UnloadChunkS2CPacket p) return "UnloadChunk x:" + p.pos().x + " z:" + p.pos().z; - if (packet instanceof UnlockRecipesS2CPacket p) return "UnlockRecipes action:" + p.getAction().name(); - if (packet instanceof UpdateSelectedSlotS2CPacket p) return "UpdateSelectedSlot slot:" + p.getSlot(); - if (packet instanceof UpdateTickRateS2CPacket p) return "UpdateTickRate tickRate:" + p.tickRate(); - if (packet instanceof VehicleMoveS2CPacket p) return "VehicleMove x:" + p.getX() + " y:" + p.getY() + " z:" + p.getZ() + " yaw:" + p.getYaw() + " pitch:" + p.getPitch(); - if (packet instanceof WorldBorderCenterChangedS2CPacket p) return "WorldBorderCenterChanged x:" + p.getCenterX() + " z:" + p.getCenterZ(); - if (packet instanceof WorldBorderInitializeS2CPacket p) return "WorldBorderInitialize centerX:" + p.getCenterX() + " centerZ:" + p.getCenterZ() + " size:" + p.getSize() + " sizeLerpTarget:" + p.getSizeLerpTarget() + " sizeLerpTime:" + p.getSizeLerpTime() + " warningBlocks:" + p.getWarningBlocks() + " warningTime:" + p.getWarningTime() + " maxRadius:" + p.getMaxRadius(); - if (packet instanceof WorldBorderInterpolateSizeS2CPacket p) return "WorldBorderInterpolateSize size:" + p.getSize() + " sizeLerpTarget:" + p.getSizeLerpTarget() + " sizeLerpTime:" + p.getSizeLerpTime(); - if (packet instanceof WorldBorderSizeChangedS2CPacket p) return "WorldBorderSizeChanged sizeLerpTarget:" + p.getSizeLerpTarget(); - if (packet instanceof WorldBorderWarningBlocksChangedS2CPacket p) return "WorldBorderWarningBlocksChanged warnignBlocks:" + p.getWarningBlocks(); - if (packet instanceof WorldBorderWarningTimeChangedS2CPacket p) return "WorldBorderWarningTimeChanged time:" + p.getWarningTime(); - if (packet instanceof WorldEventS2CPacket p) return "WorldEvent x:" + p.getPos().getX() + " y:" + p.getPos().getY() + " z:" + p.getPos().getZ() + " eventId:" + p.getEventId() + " data:" + p.getData() + " global:" + p.isGlobal(); - if (packet instanceof WorldTimeUpdateS2CPacket p) return "WorldTimeUpdate time:" + p.getTime() + " timeOfDay:" + p.getTimeOfDay(); - - if (packet instanceof PingResultS2CPacket p) return "PingResult startTime:" + p.getStartTime(); - if (packet instanceof QueryResponseS2CPacket p) return "QueryResponse description:" + p.metadata().description() + " onlinePlayers" + (p.metadata().players().isPresent() ? p.metadata().players().get().online() : "null") + " maxPlayers" + (p.metadata().players().isPresent() ? p.metadata().players().get().max() : "null"); - - return null; - } - - private String fromCollection(Collection c) { - StringBuilder builder = new StringBuilder(); - for (String s : c) builder.append(s).append("\n"); - return builder.toString(); - } - - private String recipes(List> list) { - StringBuilder builder = new StringBuilder(); - for (RecipeEntry r : list) builder.append(r.value().createIcon().getItem().getName()).append("\n"); - return builder.toString(); - } - - private String stats(Map, Integer> map) { - StringBuilder builder = new StringBuilder(); - for (Map.Entry, Integer> o : map.entrySet()) - builder.append(o.getKey().getName()).append(" --- ").append(o.getValue()).append("\n"); - return builder.toString(); - } - - private String offers(TradeOfferList offers) { - StringBuilder builder = new StringBuilder(); - for (TradeOffer o : offers) - builder.append(o.copySellItem().getItem().getName()).append(" -> ").append(o.getOriginalFirstBuyItem().getItem().getName()).append(" & ").append(o.getSecondBuyItem().getItem().getName()).append("\n"); - return builder.toString(); - } - - private String listProfiles(List uuids) { - StringBuilder builder = new StringBuilder(); - for (UUID i : uuids) builder.append(i).append("\n"); - return builder.toString(); - } - - private String listStacks(List itemStacks) { - StringBuilder builder = new StringBuilder(); - for (ItemStack i : itemStacks) - builder.append("name:").append(i.getName()).append("item").append(i.getItem().getName()).append("count").append(i.getCount()).append("\n"); - return builder.toString(); - } - - private String mergeIds(int[] ids) { - StringBuilder builder = new StringBuilder(); - for (int i : ids) builder.append(i).append("\n"); - return builder.toString(); - } - - private String mergeSuggestions(List list) { - StringBuilder builder = new StringBuilder(); - for (Suggestion s : list) builder.append(s.getText()).append("\n"); - return builder.toString(); - } - - private String merge(List list) { - StringBuilder builder = new StringBuilder(); - for (String s : list) builder.append(s).append("\n"); - return builder.toString(); - } - - private String signText(String[] strings) { - StringBuilder builder = new StringBuilder(); - for (String s : strings) builder.append(s).append("\n"); - return builder.toString(); + PacketNames.PacketData data = PacketNames.getData(packet); + return data == null ? null : data.funnyApply(packet); } } diff --git a/src/main/java/kassuk/addon/blackout/modules/SpeedPlus.java b/src/main/java/kassuk/addon/blackout/modules/SpeedPlus.java index f783e77..8ce2b8e 100644 --- a/src/main/java/kassuk/addon/blackout/modules/SpeedPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/SpeedPlus.java @@ -146,7 +146,7 @@ public void onDeactivate() { @EventHandler private void onKB(PacketEvent.Receive event) { if (mc.player != null && mc.world != null) { - if (knockBack.get() && event.packet instanceof EntityVelocityUpdateS2CPacket packet && packet.getId() == mc.player.getId()) { + if (knockBack.get() && event.packet instanceof EntityVelocityUpdateS2CPacket packet && packet.getEntityId() == mc.player.getId()) { double x = packet.getVelocityX() / 8000f; double z = packet.getVelocityZ() / 8000f; velocity = Math.max(velocity, Math.sqrt(x * x + z * z) * kbFactor.get()); diff --git a/src/main/java/kassuk/addon/blackout/modules/SurroundPlus.java b/src/main/java/kassuk/addon/blackout/modules/SurroundPlus.java index fb1228c..041f1cc 100644 --- a/src/main/java/kassuk/addon/blackout/modules/SurroundPlus.java +++ b/src/main/java/kassuk/addon/blackout/modules/SurroundPlus.java @@ -382,7 +382,7 @@ private Entity getBlocking() { if (antiCev.get()) { for (BlockPos pos : surroundBlocks) { if (entity.getBlockPos().equals(pos.up())) { - double dmg = Math.max(10, BODamageUtils.crystal(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false)); + double dmg = Math.max(10, BODamageUtils.crystalDamage(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false)); if (dmg < lowest) { lowest = dmg; @@ -395,7 +395,7 @@ private Entity getBlocking() { for (BlockPos pos : alwaysAttack.get() ? surroundBlocks : valids) { if (!Box.from(new BlockBox(pos)).intersects(entity.getBoundingBox())) continue; - double dmg = BODamageUtils.crystal(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false); + double dmg = BODamageUtils.crystalDamage(mc.player, mc.player.getBoundingBox(), entity.getPos(), null, false); if (dmg < lowest) { crystal = entity; lowest = dmg; diff --git a/src/main/java/kassuk/addon/blackout/utils/OLEPOSSUtils.java b/src/main/java/kassuk/addon/blackout/utils/OLEPOSSUtils.java index 00f33a0..f3a94b7 100644 --- a/src/main/java/kassuk/addon/blackout/utils/OLEPOSSUtils.java +++ b/src/main/java/kassuk/addon/blackout/utils/OLEPOSSUtils.java @@ -3,12 +3,20 @@ import kassuk.addon.blackout.mixins.IBlockSettings; import meteordevelopment.meteorclient.mixin.AbstractBlockAccessor; import net.minecraft.block.*; +import net.minecraft.component.type.ItemEnchantmentsComponent; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.registry.RegistryKey; +import net.minecraft.util.Identifier; import net.minecraft.util.math.*; +import java.util.Comparator; + import static meteordevelopment.meteorclient.MeteorClient.mc; /** @@ -16,6 +24,29 @@ */ public class OLEPOSSUtils { + public static Vec3d feet(Box box) { + return new Vec3d((box.minX + box.maxX) / 2, box.minY, (box.minZ + box.maxZ) / 2); + } + + public static boolean hasAquaAffinity(LivingEntity entity) { + for (ItemStack stack : entity.getArmorItems()) { + if (hasEnchantment(Enchantments.AQUA_AFFINITY, stack)) return true; + } + return false; + } + + public static boolean hasEnchantment(RegistryKey enchantment, ItemStack stack) { + ItemEnchantmentsComponent v = stack.getEnchantments(); + Identifier enchantmentId = enchantment.getValue(); + return v.getEnchantments().stream().anyMatch(entry -> entry.matchesId(enchantmentId)); + } + + public static int getLevel(RegistryKey enchantment, ItemStack stack) { + ItemEnchantmentsComponent v = stack.getEnchantments(); + Identifier enchantmentId = enchantment.getValue(); + return v.getEnchantments().stream().filter(entry -> entry.matchesId(enchantmentId)).map(v::getLevel).max(Comparator.comparingInt(level -> level)).orElse(0); + } + public static Vec3d getMiddle(Box box) { return new Vec3d((box.minX + box.maxX) / 2, (box.minY + box.maxY) / 2, (box.minZ + box.maxZ) / 2); } diff --git a/src/main/java/kassuk/addon/blackout/utils/PacketNames.java b/src/main/java/kassuk/addon/blackout/utils/PacketNames.java new file mode 100644 index 0000000..167d8e8 --- /dev/null +++ b/src/main/java/kassuk/addon/blackout/utils/PacketNames.java @@ -0,0 +1,705 @@ +/* + * This file is a part the best minecraft mod called Blackout Client (https://github.com/KassuK1/Blackout-Client) + * and licensed under the GNU GENERAL PUBLIC LICENSE (check LICENCE file or https://www.gnu.org/licenses/gpl-3.0.html) + * Copyright (C) 2024 KassuK and OLEPOSSU + */ + +package kassuk.addon.blackout.utils; + +import com.mojang.authlib.properties.Property; +import kassuk.addon.blackout.mixins.AccessorNbtCompound; +import kassuk.addon.blackout.mixins.IInteractEntityC2SPacket; +import meteordevelopment.meteorclient.mixininterface.IPlayerInteractEntityC2SPacket; +import net.minecraft.advancement.AdvancementEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.map.MapDecoration; +import net.minecraft.item.map.MapState; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.c2s.common.*; +import net.minecraft.network.packet.c2s.config.ReadyC2SPacket; +import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; +import net.minecraft.network.packet.c2s.login.EnterConfigurationC2SPacket; +import net.minecraft.network.packet.c2s.login.LoginHelloC2SPacket; +import net.minecraft.network.packet.c2s.login.LoginKeyC2SPacket; +import net.minecraft.network.packet.c2s.login.LoginQueryResponseC2SPacket; +import net.minecraft.network.packet.c2s.play.*; +import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket; +import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket; +import net.minecraft.network.packet.s2c.common.*; +import net.minecraft.network.packet.s2c.config.DynamicRegistriesS2CPacket; +import net.minecraft.network.packet.s2c.config.FeaturesS2CPacket; +import net.minecraft.network.packet.s2c.config.ReadyS2CPacket; +import net.minecraft.network.packet.s2c.login.*; +import net.minecraft.network.packet.s2c.play.*; +import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; +import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket; +import net.minecraft.server.ServerMetadata; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.Vec3d; +import net.minecraft.village.TradedItem; + +import java.util.*; +import java.util.function.Function; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * @author OLEPOSSU + */ + +public class PacketNames { + public static final Map, PacketData> s2c = new HashMap<>(); + public static final Map, PacketData> c2s = new HashMap<>(); + + static { + /* ************************ C2S ************************ */ + + // common + c2s(ClientOptionsC2SPacket.class, "ClientOptions", packet -> "language: " + packet.options().language() + " allowsServerListing: " + packet.options().allowsServerListing() + " chatColorsEnabled: " + packet.options().chatColorsEnabled() + " chatVisibility: " + packet.options().chatVisibility() + " filtersText: " + packet.options().filtersText() + " mainArm: " + packet.options().mainArm().name() + " playerModelParts: " + packet.options().playerModelParts() + " viewDistance: " + packet.options().viewDistance()); + c2s(CommonPongC2SPacket.class, "CommonPong", packet -> "parameter: " + packet.getParameter()); + c2s(CustomPayloadC2SPacket.class, "CustomPayload", packet -> "identifier: " + packet.payload().getId().id().toString()); + c2s(KeepAliveC2SPacket.class, "KeepAlive", packet -> "id: " + packet.getId()); + c2s(ResourcePackStatusC2SPacket.class, "ResourcePackStatus", packet -> "id: " + packet.id().toString() + " status: " + packet.status().name()); + + // config + c2s(ReadyC2SPacket.class, "Ready", packet -> "transitionsNetworkState: " + packet.transitionsNetworkState()); + + // handshake + c2s(HandshakeC2SPacket.class, "Handshake", packet -> "address: " + packet.address() + " port: " + packet.port() + " protocolVersion: " + packet.protocolVersion() + " transitionsNetworkState: " + packet.transitionsNetworkState() + " intendedState: " + packet.intendedState()); + + // login + c2s(EnterConfigurationC2SPacket.class, "EnterConfiguration", packet -> "transitionsNetworkState: " + packet.transitionsNetworkState()); + c2s(LoginHelloC2SPacket.class, "LoginHello", packet -> "name: " + packet.name() + " id: " + packet.profileId().toString()); + c2s(LoginKeyC2SPacket.class, "LoginKey"); + c2s(LoginQueryResponseC2SPacket.class, "LoginQueryResponse", packet -> "queryId: " + packet.queryId()); + + // play + c2s(AcknowledgeChunksC2SPacket.class, "AcknowledgeChunks", packet -> "desiredChunksPerTick: " + packet.desiredChunksPerTick()); + c2s(AcknowledgeReconfigurationC2SPacket.class, "AcknowledgeReconfiguration", packet -> "transitionsNetworkState: " + packet.transitionsNetworkState()); + c2s(AdvancementTabC2SPacket.class, "AdvancementTab", packet -> "action: " + packet.getAction().name() + " tabToOpen: " + packet.getTabToOpen().toString()); + c2s(BoatPaddleStateC2SPacket.class, "BoatPaddleState", packet -> "isLeftPaddling: " + packet.isLeftPaddling() + " isRightPaddling: " + packet.isRightPaddling()); + c2s(BookUpdateC2SPacket.class, "BookUpdate", packet -> { + StringBuilder builder = new StringBuilder("title: " + packet.title().orElse("null") + " slot: " + packet.slot()); + for (int page = 0; page < packet.pages().size(); page++) + builder.append("\n").append(packet.pages().get(page)); + return builder.toString(); + }); + c2s(ButtonClickC2SPacket.class, "ButtonClick", packet -> "syncId: " + packet.syncId() + " buttonId: " + packet.buttonId()); + c2s(ChatMessageC2SPacket.class, "ChatMessage", packet -> "chatMessage: " + packet.chatMessage() + " timeStamp: " + packet.timestamp().toString() + " acknowledgementOffset: " + packet.acknowledgment().offset() + " signature: " + Objects.requireNonNull(packet.signature()) + " salt: " + packet.salt()); + c2s(ClickSlotC2SPacket.class, "ClickSlot", packet -> { + StringBuilder builder = new StringBuilder("syncId: " + packet.getSyncId() + " slot: " + packet.getSlot() + " button: " + packet.getButton() + " action: " + packet.getActionType().name() + " revision: " + packet.getRevision()); + builder.append(" modified: {"); + packet.getModifiedStacks().forEach((i, stack) -> builder.append("\nslot ").append(i).append(": ").append(stack.getName().getString()).append(" ").append(stack.getCount())); + builder.append("\n} stack: "); + builder.append(packet.getStack().getName().getString()).append(" ").append(packet.getStack().getCount()); + return builder.toString(); + }); + c2s(ClientCommandC2SPacket.class, "ClientCommand", packet -> "entityId: " + packet.getEntityId() + " mountJumpTime: " + packet.getMountJumpHeight() + " mode: " + packet.getMode().name()); + c2s(ClientStatusC2SPacket.class, "ClientStatus", packet -> "mode: " + packet.getMode().name()); + c2s(CloseHandledScreenC2SPacket.class, "CloseHandledScreen", packet -> "syncId: " + packet.getSyncId()); + c2s(CommandExecutionC2SPacket.class, "CommandExecution", packet -> "command: " + packet.command()); + c2s(CraftRequestC2SPacket.class, "CraftRequest", packet -> "syncId: " + packet.getSyncId() + " shouldCraftAll: " + packet.shouldCraftAll() + " recipe: " + packet.getRecipeId().toString()); + c2s(CreativeInventoryActionC2SPacket.class, "CreativeInventoryAction", packet -> "slot: " + packet.slot() + " name: " + packet.stack().getName().getString() + " count: " + packet.stack().getCount()); + c2s(HandSwingC2SPacket.class, "HandSwing", packet -> "hand: " + packet.getHand().name()); + c2s(JigsawGeneratingC2SPacket.class, "JigsawGenerating", packet -> "pos: " + packet.getPos().toShortString() + " maxDepth: " + packet.getMaxDepth() + " shouldKeepJigsaws: " + packet.shouldKeepJigsaws()); + c2s(MessageAcknowledgmentC2SPacket.class, "MessageAcknowledgment", packet -> "offset: " + packet.offset()); + c2s(PickFromInventoryC2SPacket.class, "PickFromInventory", packet -> "slot: " + packet.getSlot()); + c2s(PlayerActionC2SPacket.class, "PlayerAction", packet -> "action: " + packet.getAction().name() + "pos: " + packet.getPos().toShortString() + " direction: " + packet.getDirection().getName() + " sequence: " + packet.getSequence()); + c2s(PlayerInputC2SPacket.class, "PlayerInput", packet -> "forward: " + packet.getForward() + " sideways: " + packet.getSideways() + " isJumping: " + packet.isJumping() + " isSneaking: " + packet.isSneaking()); + c2s(PlayerInteractBlockC2SPacket.class, "PlayerInteractBlock", packet -> "hand: " + packet.getHand().name() + " blockPos: " + packet.getBlockHitResult().getBlockPos().toShortString() + " pos: " + packet.getBlockHitResult().getPos().toString() + " side: " + packet.getBlockHitResult().getSide() + " isInsideBlock: " + packet.getBlockHitResult().isInsideBlock() + " type: " + packet.getBlockHitResult().getType().name() + " sequence: " + packet.getSequence()); + c2s(PlayerInteractEntityC2SPacket.class, "PlayerInteractEntity", packet -> "id: " + ((IInteractEntityC2SPacket) packet).getId() + " type: " + ((IInteractEntityC2SPacket) packet).getType().getType().name() + " isPlayerSneaking: " + packet.isPlayerSneaking()); + c2s(PlayerInteractItemC2SPacket.class, "PlayerInteractItem", packet -> "hand: " + packet.getHand().name() + " sequence: " + packet.getSequence()); + + c2s(PlayerMoveC2SPacket.Full.class, "PlayerMove Full", packet -> "x: " + packet.getX(0) + " y: " + packet.getY(0) + " z: " + packet.getZ(0) + " yaw: " + packet.getYaw(0) + " pitch: " + packet.getPitch(0) + " isOnGround: " + packet.isOnGround()); + c2s(PlayerMoveC2SPacket.PositionAndOnGround.class, "PlayerMove PositionAndOnGround", packet -> "x: " + packet.getX(0) + " y: " + packet.getY(0) + " z: " + packet.getZ(0) + " isOnGround: " + packet.isOnGround()); + c2s(PlayerMoveC2SPacket.LookAndOnGround.class, "PlayerMove LookAndOnGround", packet -> "yaw: " + packet.getYaw(0) + " pitch: " + packet.getPitch(0) + " isOnGround: " + packet.isOnGround()); + c2s(PlayerMoveC2SPacket.OnGroundOnly.class, "PlayerMove OnGroundOnly", packet -> "isOnGround: " + packet.isOnGround()); + + c2s(PlayerSessionC2SPacket.class, "PlayerSession", packet -> "sessionId: " + packet.chatSession().sessionId() + " isExpired: " + packet.chatSession().publicKeyData().isExpired() + " expiresAt: " + packet.chatSession().publicKeyData().expiresAt().toString() + " keySignature: " + byteArrToString(packet.chatSession().publicKeyData().keySignature())); + c2s(QueryBlockNbtC2SPacket.class, "QueryBlockNbt", packet -> "pos: " + packet.getPos() + " transactionId: " + packet.getTransactionId()); + c2s(QueryEntityNbtC2SPacket.class, "QueryEntityNbt", packet -> "entityId: " + packet.getEntityId() + " transactionId: " + packet.getTransactionId()); + c2s(RecipeBookDataC2SPacket.class, "RecipeBookData", packet -> "recipeId: " + packet.getRecipeId().toString()); + c2s(RecipeCategoryOptionsC2SPacket.class, "RecipeCategoryOptions", packet -> "category: " + packet.getCategory().name() + " isFilteringCraftable: " + packet.isFilteringCraftable() + " isGuiOpen: " + packet.isGuiOpen()); + c2s(RenameItemC2SPacket.class, "RenameItem", packet -> "name: " + packet.getName()); + c2s(RequestCommandCompletionsC2SPacket.class, "RequestCommandCompletions", packet -> "partialCommand: " + packet.getPartialCommand() + " completionId: " + packet.getCompletionId()); + c2s(SelectMerchantTradeC2SPacket.class, "SelectMerchantTrade", packet -> "tradeId: " + packet.getTradeId()); + c2s(SlotChangedStateC2SPacket.class, "SlotChangedState", packet -> "slotId: " + packet.slotId() + " newState: " + packet.newState() + " screenHandlerId: " + packet.screenHandlerId()); + c2s(SpectatorTeleportC2SPacket.class, "SpectatorTeleport"); + c2s(TeleportConfirmC2SPacket.class, "TeleportConfirm", packet -> "teleportId: " + packet.getTeleportId()); + c2s(UpdateBeaconC2SPacket.class, "UpdateBeacon", packet -> { + StringBuilder builder = new StringBuilder(); + + builder.append("primary: "); + if (packet.primary().isPresent()) + builder.append(packet.primary().get().getIdAsString()); + else + builder.append("null"); + + builder.append(" secondary: "); + if (packet.secondary().isPresent()) + builder.append(packet.secondary().get().getIdAsString()); + else + builder.append("null"); + + return builder.toString(); + }); + c2s(UpdateCommandBlockC2SPacket.class, "UpdateCommandBlock", packet -> "command: " + packet.getCommand() + " pos: " + packet.getPos() + " isAlwaysActive: " + packet.isAlwaysActive() + " isConditional: " + packet.isConditional() + " shouldTrackOutput: " + packet.shouldTrackOutput() + " type: " + packet.getType().name()); + c2s(UpdateCommandBlockMinecartC2SPacket.class, "UpdateCommandBlockMinecart", packet -> "command: " + packet.getCommand() + " shouldTrackOutput: " + packet.shouldTrackOutput()); + c2s(UpdateDifficultyC2SPacket.class, "UpdateDifficulty", packet -> "difficulty: " + packet.getDifficulty().getName()); + c2s(UpdateDifficultyLockC2SPacket.class, "UpdateDifficultyLock", packet -> "isDifficultyLocked: " + packet.isDifficultyLocked()); + c2s(UpdateJigsawC2SPacket.class, "UpdateJigsaw", packet -> "name: " + packet.getName().toString() + " pos: " + packet.getPos().toShortString() + " finalState: " + packet.getFinalState() + " jointType: " + packet.getJointType().asString() + " target: " + packet.getTarget().toString() + " pool: " + packet.getPool().toString() + " placementPriority: " + packet.getPlacementPriority() + " selectionPriority: " + packet.getSelectionPriority()); + c2s(UpdatePlayerAbilitiesC2SPacket.class, "UpdatePlayerAbilities", packet -> "isFlying: " + packet.isFlying()); + c2s(UpdateSelectedSlotC2SPacket.class, "UpdateSelectedSlot", packet -> "selectedSlot: " + packet.getSelectedSlot()); + c2s(UpdateSignC2SPacket.class, "UpdateSign", packet -> { + StringBuilder builder = new StringBuilder("pos: " + packet.getPos().toShortString() + " isFront: " + packet.isFront()); + for (String str : packet.getText()) builder.append("\n").append(str); + return builder.toString(); + }); + c2s(UpdateStructureBlockC2SPacket.class, "UpdateStructureBlock", packet -> "pos: " + packet.getPos().toShortString() + " rotation: " + packet.getRotation().asString() + " offset: " + packet.getOffset().toShortString() + " size: " + packet.getSize().toShortString() + " seed: " + packet.getSeed() + " templateName: " + packet.getTemplateName() + " mode: " + packet.getMode().asString() + " action: " + packet.getAction().name() + " metaData: " + packet.getMetadata() + " integrity: " + packet.getIntegrity() + " mirror: " + packet.getMirror()); + c2s(VehicleMoveC2SPacket.class, "VehicleMove", packet -> "x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch()); + + // query + c2s(QueryPingC2SPacket.class, "QueryPing", packet -> "startTime: " + packet.getStartTime()); + c2s(QueryRequestC2SPacket.class, "QueryRequest"); + + /* ************************ S2C ************************ */ + + // common + s2c(CommonPingS2CPacket.class, "CommonPing", packet -> "parameter: " + packet.getParameter()); + s2c(CustomPayloadS2CPacket.class, "CustomPayload", packet -> "payloadId: " + packet.payload().getId().toString()); + s2c(DisconnectS2CPacket.class, "Disconnect", packet -> "reason: " + packet.reason().getString()); + s2c(KeepAliveS2CPacket.class, "KeepAlive", packet -> "id: " + packet.getId()); + s2c(ResourcePackRemoveS2CPacket.class, "ResourcePackRemove", packet -> "id: " + packet.id()); + s2c(ResourcePackSendS2CPacket.class, "ResourcePackSend", packet -> "url: " + packet.url() + " hash: " + packet.hash() + " id: " + packet.id().toString() + " prompt: " + packet.prompt().orElse(Text.of("null")).getString() + " required: " + packet.required()); + s2c(SynchronizeTagsS2CPacket.class, "SynchronizeTags", packet -> { + StringBuilder builder = new StringBuilder("groups: "); + packet.getGroups().forEach((key, serialized) -> builder.append("\n").append(key.toString()).append(" serializedSize: ").append(serialized.size())); + return builder.toString(); + }); + + // config + s2c(DynamicRegistriesS2CPacket.class, "DynamicRegistries"); + s2c(FeaturesS2CPacket.class, "Features", packet -> { + StringBuilder builder = new StringBuilder("features: "); + for (Identifier v : packet.features()) + builder.append("\n").append(v.toString()); + return builder.toString(); + }); + s2c(ReadyS2CPacket.class, "Ready", packet -> "transitionsNetworkState: " + packet.transitionsNetworkState()); + + // login + s2c(LoginCompressionS2CPacket.class, "LoginCompression", packet -> "compressionThreshold: " + packet.getCompressionThreshold()); + s2c(LoginDisconnectS2CPacket.class, "LoginDisconnect", packet -> "reason: " + packet.getReason()); + s2c(LoginHelloS2CPacket.class, "LoginHello", packet -> "serverId: " + packet.getServerId() + " nonce: " + byteArrToString(packet.getNonce())); + s2c(LoginQueryRequestS2CPacket.class, "LoginQueryRequest", packet -> "queryId: " + packet.queryId() + " payloadId: " + packet.payload().id()); + s2c(LoginSuccessS2CPacket.class, "LoginSuccess", packet -> { + StringBuilder builder = new StringBuilder("name: " + packet.profile().getName() + " id: " + packet.profile().getId().toString() + " newNetworkState: " + packet.getPacketId().id().toString() + " properties: {"); + packet.profile().getProperties().asMap().forEach((str, collection) -> { + builder.append("\n").append(str); + for (Property v : collection) { + builder.append("\n ").append(v.name()).append(" ").append(v.value()).append(" ").append(v.signature()); + } + }); + builder.append("\n}"); + return builder.toString(); + }); + + // play + s2c(AdvancementUpdateS2CPacket.class, "AdvancementUpdate", packet -> { + StringBuilder builder = new StringBuilder("shouldClearCurrent: " + packet.shouldClearCurrent()); + + // this packet is gonna fill the whole log + builder.append(" advancementIdsToRemove: {"); + for (Identifier v : packet.getAdvancementIdsToRemove()) + builder.append("\n ").append(v.toString()); + builder.append("\n}"); + + builder.append(" advancementsToEarn: {"); + for (AdvancementEntry v : packet.getAdvancementsToEarn()) + builder.append("\n ").append(v.toString()); + builder.append("\n}"); + + builder.append(" advancementsToEarn: {"); + packet.getAdvancementsToProgress().forEach((id, progress) -> { + builder.append("\n id: ").append(id.toString()) + .append(" isDone: ").append(progress.isDone()) + .append(" isAnyObtained: ").append(progress.isAnyObtained()) + .append(" progressBarPercentage: ").append(progress.getProgressBarPercentage()) + .append(" progressBarFraction: ").append(progress.getProgressBarFraction() == null ? "null" : progress.getProgressBarFraction().getString()) + .append(" earliestProgressObtainDate: ").append(progress.getEarliestProgressObtainDate() == null ? "null" : progress.getEarliestProgressObtainDate().toString()) + .append(" obtainedCriteria: {"); + + for (String str : progress.getObtainedCriteria()) { + builder.append("\n ").append(str); + } + + builder.append("\n }\n unobtainedCriteria"); + for (String str : progress.getUnobtainedCriteria()) { + builder.append("\n ").append(str); + } + builder.append("\n }"); + }); + builder.append("\n}"); + return builder.toString(); + }); + s2c(BlockBreakingProgressS2CPacket.class, "BlockBreakingProgress", packet -> "pos: " + packet.getPos().toShortString() + " progress: " + packet.getProgress() + " entityId: " + packet.getEntityId()); + s2c(BlockEntityUpdateS2CPacket.class, "BlockEntityUpdate", packet -> { + StringBuilder builder = new StringBuilder("pos: " + packet.getPos().toShortString() + " blockEntityType: "); + builder.append(packet.getBlockEntityType().getRegistryEntry().getIdAsString()); + builder.append(" nbt: {"); + ((AccessorNbtCompound) packet.getNbt()).getEntries().forEach((string, element) -> builder.append("\n ").append(string).append(" ").append(element.asString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(BlockEventS2CPacket.class, "BlockEvent", packet -> "pos: " + packet.getPos().toShortString() + " block: " + packet.getBlock().getName() + " data: " + packet.getData() + " type: " + packet.getType()); + s2c(BlockUpdateS2CPacket.class, "BlockUpdate", packet -> "pos: " + packet.getPos() + " state: {" + packet.getState().toString() + "}"); + s2c(BossBarS2CPacket.class, "BossBar"); + s2c(BundleS2CPacket.class, "Bundle", packet -> { + StringBuilder builder = new StringBuilder("BUNDLE START"); + packet.getPackets().forEach(p -> { + builder.append("\n").append(getData(p).getName()).append(" ").append(getData(p).funnyApply(p)); + }); + builder.append("\nBUNDLE END"); + return builder.toString(); + }); + s2c(ChatMessageS2CPacket.class, "ChatMessage", packet -> "unsignedContent: " + packet.unsignedContent().getString() + " sender: " + packet.sender().toString() + " index: " + packet.index() + " isWritingErrorSkippable: " + packet.isWritingErrorSkippable() + " isFullyFiltered: " + packet.filterMask().isFullyFiltered() + " isPassThrough: " + packet.filterMask().isPassThrough() + " bodyContent: " + packet.body().content() + " bodySalt: " + packet.body().salt() + " bodyTimestamp: " + packet.body().timestamp() + " bodyLastSeenSize: " + packet.body().lastSeen().buf().size() + " signature: " + byteArrToString(packet.signature().data()) + " serializedParametersName: " + packet.serializedParameters().name().getString() + " serializedParametersTargetName: " + packet.serializedParameters().targetName().orElse(Text.of("null")).getString()); + s2c(ChatSuggestionsS2CPacket.class, "ChatSuggestions", packet -> { + StringBuilder builder = new StringBuilder("action: " + packet.action().name() + " entries: {"); + for (String entry : packet.entries()) builder.append("\n ").append(entry); + builder.append("\n}"); + return builder.toString(); + }); + s2c(ChunkBiomeDataS2CPacket.class, "ChunkBiomeData", packet -> { + StringBuilder builder = new StringBuilder("chunkBiomeData: {"); + for (var v : packet.chunkBiomeData()) + builder.append("\n pos: ").append(v.pos()).append(" buffer: ").append(byteArrToString(v.buffer())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(ChunkDataS2CPacket.class, "ChunkData", packet -> { + + String builder = "chunkX: " + packet.getChunkX() + " chunkZ: " + packet.getChunkZ() + " chunkDataSectionsDataBuf: " + byteArrToString(packet.getChunkData().getSectionsDataBuf().array()) + " chunkDataHeightMap: {" + "\n} " + + " lightDataBlockNibblesSize: " + packet.getLightData().getBlockNibbles().size() + + " lightDataBlockNibblesSize: " + packet.getLightData().getSkyNibbles().size(); + + return builder; + }); + s2c(ChunkDeltaUpdateS2CPacket.class, "ChunkDeltaUpdate"); + s2c(ChunkLoadDistanceS2CPacket.class, "ChunkLoadDistance", packet -> "distance: " + packet.getDistance()); + s2c(ChunkRenderDistanceCenterS2CPacket.class, "ChunkRenderDistanceCenter", packet -> "chunkX: " + packet.getChunkX() + " chunkZ: " + packet.getChunkZ()); + s2c(ChunkSentS2CPacket.class, "ChunkSent", packet -> "batchSize: " + packet.batchSize()); + s2c(ClearTitleS2CPacket.class, "ClearTitle", packet -> "shouldReset: " + packet.shouldReset()); + s2c(CloseScreenS2CPacket.class, "CloseScreen", packet -> "syncId: " + packet.getSyncId()); + s2c(CommandSuggestionsS2CPacket.class, "CommandSuggestions", packet -> { + StringBuilder builder = new StringBuilder("id: " + packet.id() + " length: " + packet.length() + " start: " + packet.start() + " suggestions: {"); + packet.suggestions().forEach(suggestion -> builder.append("\n text: ").append(suggestion.text()).append(" toolTip: ").append(suggestion.tooltip().orElse(Text.of("null")).getString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(CommandTreeS2CPacket.class, "CommandTree"); //TODO: should add something here + s2c(CooldownUpdateS2CPacket.class, "CooldownUpdate", packet -> "item: " + packet.item().getName() + " cooldown: " + packet.cooldown()); + s2c(CraftFailedResponseS2CPacket.class, "CraftFailedResponse", packet -> "syncId: " + packet.getSyncId() + " recipeId: " + packet.getRecipeId()); + s2c(DamageTiltS2CPacket.class, "DamageTiltS2CPacket", packet -> "id: " + packet.id() + " yaw: " + packet.yaw()); + s2c(DeathMessageS2CPacket.class, "DeathMessage", packet -> "playerId: " + packet.playerId() + " message: " + packet.message().getString()); + s2c(DifficultyS2CPacket.class, "Difficulty", packet -> "difficulty: " + packet.getDifficulty().getName() + " isDifficultyLocked: " + packet.isDifficultyLocked()); + s2c(EndCombatS2CPacket.class, "EndCombat"); + s2c(EnterCombatS2CPacket.class, "EnterCombat"); + s2c(EnterReconfigurationS2CPacket.class, "EnterReconfiguration"); + s2c(EntitiesDestroyS2CPacket.class, "EntitiesDestroy", packet -> { + StringBuilder builder = new StringBuilder("entityIds: {"); + packet.getEntityIds().forEach(id -> builder.append("\n ").append(id)); + builder.append("\n}"); + return builder.toString(); + }); + s2c(EntityAnimationS2CPacket.class, "EntityAnimation", packet -> "entityId: " + packet.getEntityId() + " animationId: " + packet.getAnimationId()); + s2c(EntityAttachS2CPacket.class, "EntityAttach", packet -> "holdingEntityId: " + packet.getHoldingEntityId() + " attachedEntityId: " + packet.getAttachedEntityId()); + s2c(EntityAttributesS2CPacket.class, "EntityAttributes", packet -> { + StringBuilder builder = new StringBuilder("entityId: " + packet.getEntityId() + " attributes: {"); + packet.getEntries().forEach(entry -> { + String attribute = entry.attribute().getIdAsString(); + + builder.append("\n attribute: ").append(attribute).append(" base: ").append(entry.base()).append(" modifiers: {"); + entry.modifiers().forEach(modifier -> builder.append("\n id: ").append(modifier.id().toString()).append(" value: ").append(modifier.value())); + builder.append("\n }"); + }); + builder.append("\n}"); + return builder.toString(); + }); + s2c(EntityDamageS2CPacket.class, "EntityDamage", packet -> { + StringBuilder builder = new StringBuilder("entityId: " + packet.entityId() + " sourceType: "); + builder.append(packet.sourceType().getIdAsString()); + + builder.append(" sourcePosition: "); + Optional rur = packet.sourcePosition(); + builder.append(rur.isPresent() ? rur.get().toString() : "null"); + + builder.append(" sourceCauseId: ").append(packet.sourceCauseId()).append(" sourceDirectId: ").append(packet.sourceDirectId()); + return builder.toString(); + }); + s2c(EntityEquipmentUpdateS2CPacket.class, "EntityEquipmentUpdate", packet -> { + StringBuilder builder = new StringBuilder("entityId: " + packet.getEntityId() + " equipment: {"); + packet.getEquipmentList().forEach(pair -> builder.append("\n type: ").append(pair.getFirst().getName()).append(" item: ").append(pair.getSecond().getItem().getName().getString()).append(" count: ").append(pair.getSecond().getCount())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(EntityPassengersSetS2CPacket.class, "EntityPassengersSet", packet -> { + StringBuilder builder = new StringBuilder("entityId: " + packet.getEntityId() + " passengerIds: "); + for (int id : packet.getPassengerIds()) builder.append("\n ").append(id); + builder.append("\n}"); + return builder.toString(); + }); + s2c(EntityPositionS2CPacket.class, "EntityPosition", packet -> "entityId: " + packet.getEntityId() + " x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch() + " isOnGround: " + packet.isOnGround()); + s2c(EntityS2CPacket.class, "Entity", packet -> "deltaX: " + packet.getDeltaX() + " deltaY: " + packet.getDeltaY() + " deltaZ: " + packet.getDeltaZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch() + " hasRotation: " + packet.hasRotation() + " isPositionChanged: " + packet.isPositionChanged() + " isOnGround: " + packet.isOnGround()); + s2c(EntitySetHeadYawS2CPacket.class, "EntitySetHeadYaw", packet -> "headYaw: " + packet.getHeadYaw()); + s2c(EntitySpawnS2CPacket.class, "EntitySpawn", packet -> "entityId: " + packet.getEntityId() + " entityData: " + packet.getEntityData() + " entityType: " + packet.getEntityType().getName() + " uuid: " + packet.getUuid().toString() + " x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch() + " headYaw: " + packet.getHeadYaw() + " velocityX: " + packet.getVelocityX() + " velocityY: " + packet.getVelocityY() + " velocityZ: " + packet.getVelocityZ()); + s2c(EntityStatusEffectS2CPacket.class, "EntityStatusEffect", packet -> { + String effect = packet.getEffectId().getIdAsString(); + return "effectId: " + effect + " entityId: " + packet.getEntityId() + " amplifier: " + packet.getAmplifier() + " duration: " + packet.getDuration() + " isAmbient: " + packet.isAmbient() + " shouldShowIcon: " + packet.shouldShowIcon() + " shouldShowParticles: " + packet.shouldShowParticles(); + }); + s2c(EntityStatusS2CPacket.class, "EntityStatus", packet -> String.valueOf(packet.getStatus())); + s2c(EntityTrackerUpdateS2CPacket.class, "EntityTrackerUpdate", packet -> { + StringBuilder builder = new StringBuilder("id: " + packet.id() + " trackedValues: {"); + packet.trackedValues().forEach(entry -> builder.append("\n id: ").append(entry.id()).append(" value: ").append(entry.value())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(EntityVelocityUpdateS2CPacket.class, "EntityVelocityUpdate", packet -> "entityId: " + packet.getEntityId() + " velocityX: " + packet.getVelocityX() + " velocityY: " + packet.getVelocityY() + " velocityZ: " + packet.getVelocityZ()); + s2c(ExperienceBarUpdateS2CPacket.class, "ExperienceBarUpdate", packet -> "experience: " + packet.getExperience() + " barProgress: " + packet.getBarProgress() + " experienceLevel: " + packet.getExperienceLevel()); + s2c(ExperienceOrbSpawnS2CPacket.class, "ExperienceOrbSpawn", packet -> "entityId: " + packet.getEntityId() + " experience: " + packet.getExperience() + " x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ()); + s2c(ExplosionS2CPacket.class, "Explosion", packet -> { + StringBuilder builder = new StringBuilder("x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " playerVelocityX: " + packet.getPlayerVelocityX() + " playerVelocityY: " + packet.getPlayerVelocityY() + " playerVelocityZ: " + packet.getPlayerVelocityZ() + " destructionType: " + packet.getDestructionType().name() + " radius: " + packet.getRadius() + " particle: " + packet.getParticle().getType().toString() + " emitterParticle: " + packet.getEmitterParticle().getType().toString() + " soundEvent: "); + builder.append(packet.getSoundEvent().getIdAsString()); + builder.append(" affectedBlocks: {"); + packet.getAffectedBlocks().forEach(pos -> builder.append("\n ").append(pos.toShortString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(GameJoinS2CPacket.class, "GameJoin", packet -> { + StringBuilder builder = new StringBuilder("playerEntityId: " + packet.playerEntityId() + " maxPlayers: " + packet.maxPlayers() + " viewDistance: " + packet.viewDistance() + " simulationDistance: " + packet.simulationDistance() + " doLimitedCrafting: " + packet.doLimitedCrafting() + " enforcesSecureChat: " + packet.enforcesSecureChat() + " hardcore: " + packet.hardcore() + " showDeathScreen: " + packet.showDeathScreen() + " reducedDebugInfo: " + packet.reducedDebugInfo() + " commonPlayerSpawnInfoGameMode: " + packet.commonPlayerSpawnInfo().gameMode() + " commonPlayerSpawnInfoIsFlat: " + packet.commonPlayerSpawnInfo().isFlat() + " commonPlayerSpawnInfoPrevGameMode: " + packet.commonPlayerSpawnInfo().prevGameMode() + " commonPlayerSpawnInfoSeed: " + packet.commonPlayerSpawnInfo().seed() + " commonPlayerSpawnInfoPortalCooldown: " + packet.commonPlayerSpawnInfo().portalCooldown()); + builder.append(" commonPlayerSpawnInfoDimension: ").append(packet.commonPlayerSpawnInfo().dimension().getValue().toString()); + builder.append(" commonPlayerSpawnInfoDimensionType: ").append(packet.commonPlayerSpawnInfo().dimensionType().getIdAsString()); + builder.append(" commonPlayerSpawnInfoLastDeathPos: ").append(packet.commonPlayerSpawnInfo().lastDeathLocation().isPresent() ? packet.commonPlayerSpawnInfo().lastDeathLocation().get().toString() : "null"); + builder.append(" dimensionIds: {"); + packet.dimensionIds().forEach(key -> builder.append("\n ").append(key.getValue().toString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(GameMessageS2CPacket.class, "GameMessage", packet -> "content: " + packet.content().getString() + " overlay: " + packet.overlay()); + s2c(GameStateChangeS2CPacket.class, "GameStateChange", packet -> "value: " + packet.getValue()); + s2c(HealthUpdateS2CPacket.class, "HealthUpdate", packet -> "health: " + packet.getHealth() + " food: " + packet.getFood() + " saturation: " + packet.getSaturation()); + s2c(InventoryS2CPacket.class, "Inventory", packet -> { + StringBuilder builder = new StringBuilder("syncId: " + packet.getSyncId() + " revision: " + packet.getRevision() + "cursorStackItem: " + packet.getCursorStack().getItem().getName().getString() + " cursorStackCount:" + packet.getCursorStack().getCount() + " contents: {"); + for (int i = 0; i < packet.getContents().size(); i++) { + ItemStack stack = packet.getContents().get(i); + builder.append("\n slot: ").append(i).append(" item: ").append(stack.getItem().getName().getString()).append(" count: ").append(stack.getCount()); + } + builder.append("\n}"); + return builder.toString(); + }); + s2c(ItemPickupAnimationS2CPacket.class, "ItemPickupAnimation", packet -> "entityId: " + packet.getEntityId() + " collectorEntityId: " + packet.getCollectorEntityId() + " stackAmount: " + packet.getStackAmount()); + s2c(LightUpdateS2CPacket.class, "LightUpdate", packet -> "chunkX: " + packet.getChunkX() + " chunkZ: " + packet.getChunkZ() + " blockNibblesSize: " + packet.getData().getBlockNibbles().size() + " skyNibblesSize: " + packet.getData().getSkyNibbles().size()); + s2c(LookAtS2CPacket.class, "LookAt"); + s2c(MapUpdateS2CPacket.class, "MapUpdate", packet -> { + StringBuilder builder = new StringBuilder("mapId: " + packet.mapId().id() + " locked: " + packet.locked() + " scale: " + packet.scale()); + + builder.append(" decorations: {"); + if (packet.decorations().isPresent()) { + List decorations = packet.decorations().get(); + decorations.forEach(decoration -> builder.append("\n name: ").append(decoration.name().orElse(Text.of("null")).getString()).append(" x: ").append(decoration.x()).append(" z: ").append(decoration.z()).append(" x: ").append(" type: ").append(decoration.type().getIdAsString()).append(" rotation: ").append(decoration.rotation()).append(" assetId: ").append(decoration.getAssetId()).append(" isAlwaysRendered: ").append(decoration.isAlwaysRendered())); + } + builder.append("\n}"); + + String startX; + String startZ; + String width; + String height; + String colors; + + if (packet.updateData().isPresent()) { + MapState.UpdateData data = packet.updateData().get(); + startX = String.valueOf(data.startX()); + startZ = String.valueOf(data.startZ()); + width = String.valueOf(data.width()); + height = String.valueOf(data.height()); + colors = byteArrToString(data.colors()); + } else { + startX = "null"; + startZ = "null"; + width = "null"; + height = "null"; + colors = "null"; + } + + builder.append(" startX: ").append(startX).append(" startZ: ").append(startZ).append(" width: ").append(width).append(" height: ").append(height).append(" colors: ").append(colors); + return builder.toString(); + }); + s2c(NbtQueryResponseS2CPacket.class, "NbtQueryResponse", packet -> { + StringBuilder builder = new StringBuilder("transactionId: " + packet.getTransactionId()); + builder.append(" nbt: {"); + ((AccessorNbtCompound) packet.getNbt()).getEntries().forEach((string, element) -> builder.append("\n ").append(string).append(" ").append(element.asString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(OpenHorseScreenS2CPacket.class, "OpenHorseScreen", packet -> "syncId: " + packet.getSyncId() + " horseId: " + packet.getHorseId() + " slotColumnCount: " + packet.getSlotColumnCount()); + s2c(OpenScreenS2CPacket.class, "OpenScreen", packet -> "name: " + packet.getName().getString() + " syncId: " + packet.getSyncId() + " screenHandlerType: " + packet.getScreenHandlerType()); + s2c(OpenWrittenBookS2CPacket.class, "OpenWrittenBook", packet -> "hand: " + packet.getHand().name()); + s2c(OverlayMessageS2CPacket.class, "OverlayMessage", packet -> "text: " + packet.text().getString()); + s2c(ParticleS2CPacket.class, "Particle", packet -> "count: " + packet.getCount() + " x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " offsetX: " + packet.getOffsetX() + " offsetY: " + packet.getOffsetY() + " offsetZ: " + packet.getOffsetZ() + " speed: " + packet.getSpeed() + " isLongDistance: " + packet.isLongDistance() + " parameterType: " + packet.getParameters().getType()); + s2c(PlayerAbilitiesS2CPacket.class, "PlayerAbilities", packet -> "isCreativeMod: " + packet.isCreativeMode() + " allowFlying: " + packet.allowFlying() + " isInvulnerable: " + packet.isInvulnerable() + " isFlying: " + packet.isFlying() + " flySpeed: " + packet.getFlySpeed() + " walkSpeed: " + packet.getWalkSpeed()); + s2c(PlayerActionResponseS2CPacket.class, "PlayerActionResponse", packet -> "sequence: " + packet.sequence()); + s2c(PlayerListHeaderS2CPacket.class, "PlayerListHeader", packet -> "header: " + packet.header().getString() + " footer: " + packet.footer().getString()); + s2c(PlayerListS2CPacket.class, "PlayerList", packet -> { + StringBuilder builder = new StringBuilder("entries: {"); + + packet.getEntries().forEach(entry -> builder.append("\n displayName: ").append(entry.displayName()).append(" profileId: ").append(entry.profileId()).append(" gameProfileName: ").append(entry.profile() == null ? "null" : entry.profile().getName()).append(" gameProfileId: ").append(entry.profile() == null ? "null" : entry.profile().getId()).append(" listed: ").append(entry.listed()).append(" gameMode: ").append(entry.gameMode()).append(" latency: ").append(entry.latency()).append(" chatSessionId: ").append(entry.chatSession() == null ? "null" : entry.chatSession().sessionId().toString()).append(" isExpired: ").append(entry.chatSession() == null ? "null" : entry.chatSession().publicKeyData().isExpired()).append(" expiresAt: ").append(entry.chatSession() == null ? "null" : entry.chatSession().publicKeyData().expiresAt().toString()).append(" keySignature: ").append(entry.chatSession() == null ? "null" : byteArrToString(entry.chatSession().publicKeyData().keySignature()))); + builder.append("\n} playerAdditionEntries: {"); + packet.getPlayerAdditionEntries().forEach(entry -> builder.append("\n displayName: ").append(entry.displayName()).append(" profileId: ").append(entry.profileId()).append(" gameProfileName: ").append(entry.profile() == null ? "null" : entry.profile().getName()).append(" gameProfileId: ").append(entry.profile() == null ? "null" : entry.profile().getId()).append(" listed: ").append(entry.listed()).append(" gameMode: ").append(entry.gameMode()).append(" latency: ").append(entry.latency()).append(" chatSessionId: ").append(entry.chatSession() == null ? "null" : entry.chatSession().sessionId().toString()).append(" isExpired: ").append(entry.chatSession() == null ? "null" : entry.chatSession().publicKeyData().isExpired()).append(" expiresAt: ").append(entry.chatSession() == null ? "null" : entry.chatSession().publicKeyData().expiresAt().toString()).append(" keySignature: ").append(entry.chatSession() == null ? "null" : byteArrToString(entry.chatSession().publicKeyData().keySignature()))); + builder.append("\n} actions: {"); + packet.getActions().forEach(action -> builder.append("\n ").append(action.name())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(PlayerPositionLookS2CPacket.class, "PlayerPositionLook", packet -> { + StringBuilder builder = new StringBuilder("teleportId: " + packet.getTeleportId() + " x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch() + " flags: {"); + packet.getFlags().forEach(flag -> builder.append("\n ").append(flag.name())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(PlayerRemoveS2CPacket.class, "PlayerRemove", packet -> { + StringBuilder builder = new StringBuilder("profileIds: {"); + packet.profileIds().forEach(id -> builder.append("\n ").append(id.toString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(PlayerRespawnS2CPacket.class, "PlayerRespawn", packet -> "flag: " + Integer.toBinaryString(packet.flag()) + " commonPlayerSpawnInfoGameMode: " + packet.commonPlayerSpawnInfo().gameMode() + " commonPlayerSpawnInfoIsFlat: " + packet.commonPlayerSpawnInfo().isFlat() + " commonPlayerSpawnInfoPrevGameMode: " + packet.commonPlayerSpawnInfo().prevGameMode() + " commonPlayerSpawnInfoSeed: " + packet.commonPlayerSpawnInfo().seed() + " commonPlayerSpawnInfoPortalCooldown: " + packet.commonPlayerSpawnInfo().portalCooldown() + " commonPlayerSpawnInfoDimension: " + packet.commonPlayerSpawnInfo().dimension().getValue().toString() + " commonPlayerSpawnInfoDimensionType: " + packet.commonPlayerSpawnInfo().dimensionType().getIdAsString() + " commonPlayerSpawnInfoLastDeathPos: " + (packet.commonPlayerSpawnInfo().lastDeathLocation().isPresent() ? packet.commonPlayerSpawnInfo().lastDeathLocation().get().toString() : "null")); + s2c(PlayerSpawnPositionS2CPacket.class, "PlayerSpawnPosition", packet -> "pos: " + packet.getPos().toShortString() + " angle: " + packet.getAngle()); + s2c(PlaySoundFromEntityS2CPacket.class, "PlaySoundFromEntity", packet -> "entityId: " + packet.getEntityId() + " pitch: " + packet.getPitch() + " volume: " + packet.getVolume() + " seed: " + packet.getSeed() + " category: " + packet.getCategory().getName() + " sound: " + packet.getSound().getIdAsString()); + s2c(PlaySoundS2CPacket.class, "PlaySound", packet -> "x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " pitch: " + packet.getPitch() + " volume: " + packet.getVolume() + " seed: " + packet.getSeed() + " category: " + packet.getCategory().getName() + " sound: " + packet.getSound().getIdAsString()); + s2c(ProfilelessChatMessageS2CPacket.class, "ProfilelessChatMessage", packet -> "message: " + packet.message() + " chatTypeName: " + packet.chatType().name() + " chatTypeTargetName: " + packet.chatType().targetName().orElse(Text.of("null")).getString() + " chatTypeType: " + packet.chatType().type().getIdAsString()); + s2c(RemoveEntityStatusEffectS2CPacket.class, "RemoveEntityStatusEffect", packet -> " entityId: " + packet.entityId() + " effect: " + packet.effect().getIdAsString()); + s2c(RemoveMessageS2CPacket.class, "RemoveMessage", packet -> "messageSignatureId: " + packet.messageSignature().id() + " messageSignatureFullSignature: " + byteArrToString(packet.messageSignature().fullSignature().data())); + s2c(ScoreboardDisplayS2CPacket.class, "ScoreboardDisplay", packet -> "name: " + packet.getName() + " slot: " + packet.getSlot().asString() + " slotId:" + packet.getSlot().getId()); + s2c(ScoreboardObjectiveUpdateS2CPacket.class, "ScoreboardObjectiveUpdate", packet -> "name: " + packet.getName() + " displayName: " + packet.getDisplayName() + " type: " + packet.getType().getName() + " mode: " + packet.getMode()); + s2c(ScoreboardScoreResetS2CPacket.class, "ScoreboardScoreReset", packet -> "objectiveName: " + packet.objectiveName() + " scoreHolderName: " + packet.scoreHolderName()); + s2c(ScoreboardScoreUpdateS2CPacket.class, "ScoreboardScoreUpdate", packet -> "objectiveName: " + packet.objectiveName() + " scoreHolderName: " + packet.scoreHolderName() + " score: " + packet.score() + " display: " + packet.display().orElse(Text.of("null")).getString()); + s2c(ScreenHandlerPropertyUpdateS2CPacket.class, "ScreenHandlerPropertyUpdate", packet -> "syncId: " + packet.getSyncId() + " propertyName: " + packet.getPropertyId() + " value: " + packet.getValue()); + s2c(ScreenHandlerSlotUpdateS2CPacket.class, "ScreenHandlerSlotUpdate", packet -> "syncId: " + packet.getSyncId() + " slot: " + packet.getSlot() + " revision: " + packet.getRevision() + " item: " + packet.getStack().getItem().getName() + " itemCount: " + packet.getStack().getCount()); + s2c(SelectAdvancementTabS2CPacket.class, "SelectAdvancementTab", packet -> "tabId: " + packet.getTabId()); + s2c(ServerMetadataS2CPacket.class, "ServerMetadata", packet -> "description: " + packet.description().getString() + " favicon: " + (packet.favicon().isPresent() ? byteArrToString(packet.favicon().get()) : "null")); + s2c(SetCameraEntityS2CPacket.class, "SetCameraEntity"); + s2c(SetTradeOffersS2CPacket.class, "SetTradeOffers", packet -> { + StringBuilder builder = new StringBuilder("syncId: " + packet.getSyncId() + " experience: " + packet.getExperience() + " levelProgress: " + packet.getLevelProgress() + " isLeveled: " + packet.isLeveled() + " isRefreshable: " + packet.isRefreshable() + " offers: {"); + packet.getOffers().forEach(offer -> { + builder.append("\n uses: " + offer.getUses() + " maxUses: " + offer.getMaxUses() + " demandBonus: " + offer.getDemandBonus() + " hasBeenUsed: " + offer.hasBeenUsed() + " disabled: " + offer.isDisabled() + " specialPrice: " + offer.getSpecialPrice() + " merchantExperience: " + offer.getMerchantExperience() + " shouldRewardPlayerExperience: " + offer.shouldRewardPlayerExperience() + " firstBuyItem: " + offer.getFirstBuyItem().item().getIdAsString() + " secondBuyItem: "); + Optional v = offer.getSecondBuyItem(); + builder.append(v.isPresent() ? v.get().item().getIdAsString() : "null").append(" sellItem: ").append(offer.getSellItem().getName().getString()).append(" sellItemCount: ").append(offer.getSellItem().getCount()); + builder.append(" displayedFirstBuyItem: ").append(offer.getDisplayedFirstBuyItem().getItem().getName().getString()).append(" displayedFirstBuyItemCount: ").append(offer.getDisplayedFirstBuyItem().getCount()).append(" displayedSecondBuyItem: ").append(offer.getDisplayedSecondBuyItem().getItem().getName().getString()).append(" displayedSecondBuyItemCount: ").append(offer.getDisplayedSecondBuyItem().getCount()); + builder.append(" originalFirstBuyItem: " + offer.getOriginalFirstBuyItem().getItem().getName().getString()).append(" originalFirstBuyItemCount: " + offer.getOriginalFirstBuyItem().getCount()); + }); + builder.append("\n}"); + return builder.toString(); + }); + s2c(SignEditorOpenS2CPacket.class, "SignEditorOpen", packet -> "pos: " + packet.getPos().toShortString() + " isFront: " + packet.isFront()); + s2c(SimulationDistanceS2CPacket.class, "SimulationDistance", packet -> "simulationDistance: " + packet.simulationDistance()); + s2c(StartChunkSendS2CPacket.class, "StartChunkSend"); + s2c(StatisticsS2CPacket.class, "Statistics", packet -> { + StringBuilder builder = new StringBuilder("stats: {"); + packet.stats().forEach((stat, i) -> { + builder.append("\n index: ").append(i).append(" statType: ").append(stat.getType().getName().getString()).append(" value: ").append(stat.getValue().toString()); + }); + builder.append("\n}"); + return builder.toString(); + }); + s2c(StopSoundS2CPacket.class, "StopSound", packet -> "category: " + packet.getCategory() + " soundId: " + packet.getSoundId().toString()); + s2c(SubtitleS2CPacket.class, "Subtitle", packet -> "text: " + packet.text().getString()); + s2c(SynchronizeRecipesS2CPacket.class, "SynchronizeRecipes", packet -> { + StringBuilder builder = new StringBuilder("recipes: {"); + packet.getRecipes().forEach(recipe -> builder.append("\n id: ").append(recipe.id().toString()).append(" value: ").append(recipe.value().toString())); + builder.append("\n}"); + return builder.toString(); + }); + s2c(TeamS2CPacket.class, "Team", packet -> { + StringBuilder builder = new StringBuilder("teamName: " + packet.getTeamName() + " teamOperation: " + (packet.getTeamOperation() == null ? "null" : packet.getTeamOperation().name()) + " playerListOperation: " + (packet.getPlayerListOperation() == null ? "null" : packet.getPlayerListOperation().name())); + + String displayName; + String collisionRule; + String color; + String friendlyFlagsBitwise; + String nameTagVisibilityRule; + String prefix; + String suffix; + if (packet.getTeam().isPresent()) { + TeamS2CPacket.SerializableTeam v = packet.getTeam().get(); + displayName = v.getDisplayName().getString(); + collisionRule = v.getCollisionRule(); + color = v.getColor().getName(); + friendlyFlagsBitwise = String.valueOf(v.getFriendlyFlagsBitwise()); + nameTagVisibilityRule = v.getNameTagVisibilityRule(); + prefix = v.getPrefix().getString(); + suffix = v.getSuffix().getString(); + } else { + displayName = "null"; + collisionRule = "null"; + color = "null"; + friendlyFlagsBitwise = "null"; + nameTagVisibilityRule = "null"; + prefix = "null"; + suffix = "null"; + } + builder + .append(" teamDisplayName: ").append(displayName) + .append(" teamCollisionRule: ").append(collisionRule) + .append(" teamColor: ").append(color) + .append(" teamFriendlyFlagsBitwise: ").append(friendlyFlagsBitwise) + .append(" teamNameTagVisibilityRule: ").append(nameTagVisibilityRule) + .append(" teamPrefix: ").append(prefix) + .append(" teamSuffix: ").append(suffix); + builder.append(" playerNames: {"); + packet.getPlayerNames().forEach(name -> builder.append("\n ").append(name)); + builder.append("\n}"); + return builder.toString(); + }); + s2c(TickStepS2CPacket.class, "TickStep", packet -> "tickSteps: " + packet.tickSteps()); + s2c(TitleFadeS2CPacket.class, "TitleFade", packet -> "fadeInTicks: " + packet.getFadeInTicks() + " stayTicks: " + packet.getStayTicks() + " fadeOutTicks: " + packet.getFadeOutTicks()); + s2c(TitleS2CPacket.class, "Title", packet -> "text: " + packet.text().getString()); + s2c(UnloadChunkS2CPacket.class, "UnloadChunk", packet -> "chunkX: " + packet.pos().x + " chunkZ: " + packet.pos().z); + s2c(UpdateSelectedSlotS2CPacket.class, "UpdateSelectedSlot", packet -> "slot: " + packet.getSlot()); + s2c(UpdateTickRateS2CPacket.class, "UpdateTickRate", packet -> "isFrozen: " + packet.isFrozen() + " tickRate: " + packet.tickRate()); + s2c(VehicleMoveS2CPacket.class, "VehicleMove", packet -> "x: " + packet.getX() + " y: " + packet.getY() + " z: " + packet.getZ() + " yaw: " + packet.getYaw() + " pitch: " + packet.getPitch()); + s2c(WorldBorderCenterChangedS2CPacket.class, "WorldBorderCenterChanged", packet -> "centerX: " + packet.getCenterX() + " centerZ: " + packet.getCenterZ()); + s2c(WorldBorderInitializeS2CPacket.class, "WorldBorderInitialize", packet -> "centerX: " + packet.getCenterX() + " centerZ: " + packet.getCenterZ() + " maxRadius: " + packet.getMaxRadius() + " size: " + packet.getSize() + " sizeLerpTarget: " + packet.getSizeLerpTarget() + " sizeLerpTime: " + packet.getSizeLerpTime() + " warningBlocks: " + packet.getWarningBlocks() + " warningTime: " + packet.getWarningTime()); + s2c(WorldBorderInterpolateSizeS2CPacket.class, "WorldBorderInterpolateSize", packet -> "size: " + packet.getSize() + " sizeLerpTarget: " + packet.getSizeLerpTarget() + " sizeLerpTime: " + packet.getSizeLerpTime()); + s2c(WorldBorderSizeChangedS2CPacket.class, "WorldBorderSizeChanged", packet -> "sizeLerpTarget: " + packet.getSizeLerpTarget()); + s2c(WorldBorderWarningBlocksChangedS2CPacket.class, "WorldBorderWarningBlocksChanged", packet -> "warningBlocks: " + packet.getWarningBlocks()); + s2c(WorldBorderWarningTimeChangedS2CPacket.class, "WorldBorderWarningTimeChanged", packet -> "warningTime: " + packet.getWarningTime()); + s2c(WorldEventS2CPacket.class, "WorldEvent", packet -> "pos: " + packet.getPos().toShortString() + " data: " + packet.getData() + " eventId: " + packet.getEventId() + " isGlobal: " + packet.isGlobal()); + s2c(WorldTimeUpdateS2CPacket.class, "WorldTimeUpdate", packet -> "time: " + packet.getTime() + " timeOfDay: " + packet.getTimeOfDay()); + + // query + s2c(PingResultS2CPacket.class, "PingResult", packet -> "startTime: " + packet.startTime()); + s2c(QueryResponseS2CPacket.class, "QueryResponse", packet -> { + StringBuilder builder = new StringBuilder("description: " + packet.metadata().description().getString() + " favicon: " + (packet.metadata().favicon().isPresent() ? byteArrToString(packet.metadata().favicon().get().iconBytes()) : "null") + " secureChatEnforced: " + packet.metadata().secureChatEnforced()); + + String gameVersion; + String protocolVersion; + + Optional v = packet.metadata().version(); + if (v.isPresent()) { + ServerMetadata.Version version = v.get(); + gameVersion = version.gameVersion(); + protocolVersion = String.valueOf(version.protocolVersion()); + } else { + gameVersion = "null"; + protocolVersion = "null"; + } + + builder.append(" gameVersion: ").append(gameVersion).append(" protocolVersion: ").append(protocolVersion); + + Optional v2 = packet.metadata().players(); + if (v2.isPresent()) { + ServerMetadata.Players players = v2.get(); + + builder.append(" maxPlayers: ").append(players.max()).append(" online: ").append(players.online()).append(" players: {"); + players.sample().forEach(profile -> builder.append("\n profileName: ").append(profile.getName()).append(" profileId: ").append(profile.getId().toString()).append(" propertiesSize: ").append(profile.getProperties().size())); + } else { + builder.append(" maxPlayers: null online: null players: {"); + } + builder.append("\n}"); + return builder.toString(); + }); + } + + @SuppressWarnings("unchecked") + public static > PacketData getS2C(T packet) { + return (PacketData) s2c.get(packet.getClass()); + } + + @SuppressWarnings("unchecked") + public static > PacketData getC2S(T packet) { + return (PacketData) c2s.get(packet.getClass()); + } + + public static > PacketData getData(T packet) { + return isClient(packet) ? getC2S(packet) : getS2C(packet); + } + + private static String byteArrToString(byte[] arr) { + int length = arr.length; + if (length > 30) return length + " bytes"; + + StringBuilder builder = new StringBuilder(); + builder.append(arr[0]); + for (int i = 1; i < arr.length; i++) + builder.append(",").append(arr[i]); + return builder.toString(); + } + + public static class PacketData { + private final String name; + private final Function function; + + public PacketData(String name, Function function) { + this.name = name; + this.function = function; + } + + public PacketData(String name) { + this.name = name; + this.function = p -> ""; + } + + public String getName() { + return name; + } + + @SuppressWarnings("unchecked") + public String funnyApply(Object packet) { + return apply((T) packet); + } + + public String apply(T packet) { + try { + return function.apply(packet); + } catch (Exception e) { + System.out.println("crashing packet: " + name + " - " + packet.getClass().getSimpleName() + ".class"); + throw new RuntimeException(e); + } + } + } + + private static void s2c(Class clazz, String str, Function function) { + s2c.put(clazz, new PacketData<>(str, function)); + } + + private static void s2c(Class clazz, String str) { + s2c.put(clazz, new PacketData<>(str)); + } + + private static void c2s(Class clazz, String str, Function function) { + c2s.put(clazz, new PacketData<>(str, function)); + } + + private static void c2s(Class clazz, String str) { + c2s.put(clazz, new PacketData<>(str)); + } + + public static String nameOf(Packet packet) { + return nameOf(packet.getClass()); + } + + public static String nameOf(Class clazz) { + if (c2s.containsKey(clazz)) return c2s.get(clazz).name; + if (s2c.containsKey(clazz)) return s2c.get(clazz).name; + Logger.getGlobal().log(Level.WARNING, "packet name for " + clazz.getSimpleName() + " couldn't be found"); + return clazz.getSimpleName(); + } + + public static boolean isClient(Packet packet) { + return isClient(packet.getClass()); + } + + public static boolean isClient(Class clazz) { + return c2s.containsKey(clazz); + } +} diff --git a/src/main/java/kassuk/addon/blackout/utils/RenderUtils.java b/src/main/java/kassuk/addon/blackout/utils/RenderUtils.java index 87c4e3d..469537f 100644 --- a/src/main/java/kassuk/addon/blackout/utils/RenderUtils.java +++ b/src/main/java/kassuk/addon/blackout/utils/RenderUtils.java @@ -3,6 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.render.*; +import net.minecraft.client.util.BufferAllocator; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.ColorHelper; import org.joml.Matrix4f; @@ -14,7 +15,7 @@ */ public class RenderUtils { - private static final VertexConsumerProvider.Immediate vertex = VertexConsumerProvider.immediate(new BufferBuilder(2048)); + private static final VertexConsumerProvider.Immediate vertex = VertexConsumerProvider.immediate(new BufferAllocator(2048)); public static void rounded(MatrixStack stack, float x, float y, float w, float h, float radius, int p, int color) { @@ -28,8 +29,7 @@ public static void rounded(MatrixStack stack, float x, float y, float w, float h RenderSystem.enableBlend(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR); corner(x + w, y, radius, 360, p, r, g, b, a, bufferBuilder, matrix4f); corner(x, y, radius, 270, p, r, g, b, a, bufferBuilder, matrix4f); @@ -42,7 +42,7 @@ public static void rounded(MatrixStack stack, float x, float y, float w, float h public static void corner(float x, float y, float radius, int angle, float p, float r, float g, float b, float a, BufferBuilder bufferBuilder, Matrix4f matrix4f) { for (float i = angle; i > angle - 90; i -= 90 / p) { - bufferBuilder.vertex(matrix4f, (float) (x + Math.cos(Math.toRadians(i)) * radius), (float) (y + Math.sin(Math.toRadians(i)) * radius), 0).color(r, g, b, a).next(); + bufferBuilder.vertex(matrix4f, (float) (x + Math.cos(Math.toRadians(i)) * radius), (float) (y + Math.sin(Math.toRadians(i)) * radius), 0).color(r, g, b, a); } } @@ -62,13 +62,12 @@ public static void quad(MatrixStack stack, float x, float y, float w, float h, i RenderSystem.enableBlend(); RenderSystem.setShader(GameRenderer::getPositionColorProgram); - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR); + BufferBuilder bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(matrix4f, x + w, y, 0).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix4f, x, y, 0).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix4f, x, y + h, 0).color(r, g, b, a).next(); - bufferBuilder.vertex(matrix4f, x + w, y + h, 0).color(r, g, b, a).next(); + bufferBuilder.vertex(matrix4f, x + w, y, 0).color(r, g, b, a); + bufferBuilder.vertex(matrix4f, x, y, 0).color(r, g, b, a); + bufferBuilder.vertex(matrix4f, x, y + h, 0).color(r, g, b, a); + bufferBuilder.vertex(matrix4f, x + w, y + h, 0).color(r, g, b, a); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); diff --git a/src/main/java/kassuk/addon/blackout/utils/SettingUtils.java b/src/main/java/kassuk/addon/blackout/utils/SettingUtils.java index a741443..2a15ca6 100644 --- a/src/main/java/kassuk/addon/blackout/utils/SettingUtils.java +++ b/src/main/java/kassuk/addon/blackout/utils/SettingUtils.java @@ -18,8 +18,7 @@ * @author OLEPOSSU */ -public class SettingUtils extends Utils { - +public class SettingUtils { private static final FacingSettings facing = Modules.get().get(FacingSettings.class); private static final RangeSettings range = Modules.get().get(RangeSettings.class); private static final RaytraceSettings raytrace = Modules.get().get(RaytraceSettings.class); diff --git a/src/main/java/kassuk/addon/blackout/utils/meteor/BODamageUtils.java b/src/main/java/kassuk/addon/blackout/utils/meteor/BODamageUtils.java index a1ee0a6..2d3d087 100644 --- a/src/main/java/kassuk/addon/blackout/utils/meteor/BODamageUtils.java +++ b/src/main/java/kassuk/addon/blackout/utils/meteor/BODamageUtils.java @@ -5,6 +5,7 @@ package kassuk.addon.blackout.utils.meteor; +import kassuk.addon.blackout.utils.OLEPOSSUtils; import kassuk.addon.blackout.utils.SettingUtils; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.game.GameJoinedEvent; @@ -17,6 +18,7 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.component.type.ItemEnchantmentsComponent; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; @@ -33,342 +35,201 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; +import net.minecraft.world.Difficulty; import net.minecraft.world.GameMode; import net.minecraft.world.RaycastContext; import net.minecraft.world.explosion.Explosion; +import org.apache.commons.lang3.mutable.MutableInt; import java.util.Objects; import static meteordevelopment.meteorclient.MeteorClient.mc; public class BODamageUtils { - private static final Vec3d vec3d = new Vec3d(0, 0, 0); - private static Explosion explosion; public static RaycastContext raycastContext; - public static RaycastContext bedRaycast; - @PreInit - public static void init() { - MeteorClient.EVENT_BUS.subscribe(BODamageUtils.class); + public static double crystalDamage(LivingEntity entity, Box box, Vec3d pos, boolean ignoreTerrain) { + return crystalDamage(entity, box, pos, null, ignoreTerrain); } - @EventHandler - private static void onGameJoined(GameJoinedEvent event) { - explosion = new Explosion(mc.world, null, 0, 0, 0, 6, false, Explosion.DestructionType.DESTROY); - raycastContext = new RaycastContext(null, null, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.ANY, mc.player); - bedRaycast = new RaycastContext(null, null, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.ANY, mc.player); + public static double crystalDamage(LivingEntity entity, Box box, Vec3d pos, BlockPos ignorePos, boolean ignoreTerrain) { + return explosionDamage(entity, box, pos, ignorePos, ignoreTerrain, 6); } - // Crystal damage - public static double crystal(PlayerEntity player, Box bb, Vec3d crystal, BlockPos ignore, boolean ignoreTerrain) { - if (SettingUtils.oldDamage()) return oldVerCrystal(player, bb, crystal, ignore, ignoreTerrain); - return crystalDamage(player, bb, crystal, ignore, ignoreTerrain); + public static double crystalDamage(LivingEntity entity, Box box, Vec3d pos, BlockPos ignorePos, BlockPos obbyPos, boolean ignoreTerrain) { + return explosionDamage(entity, box, pos, ignorePos, obbyPos, ignoreTerrain, 6); } - public static double crystalDamage(PlayerEntity player, Box bb, Vec3d crystal, BlockPos obsidianPos, boolean ignoreTerrain) { - if (player == null) return 0; - if (EntityUtils.getGameMode(player) == GameMode.CREATIVE && !(player instanceof FakePlayerEntity)) return 0; + public static double anchorDamage(LivingEntity entity, Box box, Vec3d pos, boolean ignoreTerrain) { + return explosionDamage(entity, box, pos, null, ignoreTerrain, 5); + } - ((IVec3d) vec3d).set((bb.minX + bb.maxX) / 2, bb.minY, (bb.minZ + bb.maxZ) / 2); + public static double anchorDamage(LivingEntity entity, Box box, Vec3d pos, BlockPos ignorePos, boolean ignoreTerrain) { + return explosionDamage(entity, box, pos, ignorePos, ignoreTerrain, 5); + } - double modDistance = Math.sqrt(vec3d.squaredDistanceTo(crystal)); - if (modDistance > 12) return 0; + private static double explosionDamage(LivingEntity entity, Box box, Vec3d pos, BlockPos ignorePos, boolean ignoreTerrain, double strength) { + return explosionDamage(entity, box, pos, ignorePos, null, ignoreTerrain, strength); + } - double exposure = getExposure(crystal, player, bb, raycastContext, obsidianPos, ignoreTerrain); - double impact = (1 - (modDistance / 12)) * exposure; - double damage = ((impact * impact + impact) / 2 * 7 * (6 * 2) + 1); + public static double getBaseDamage(Box box, Vec3d pos, BlockPos ignorePos, BlockPos obbyPos, boolean ignoreTerrain, double strength) { + double q = strength * 2; + double dist = OLEPOSSUtils.feet(box).distanceTo(pos) / q; - damage = getDamageForDifficulty(damage); - damage = DamageUtil.getDamageLeft((float) damage, (float) player.getArmor(), (float) player.getAttributeInstance(EntityAttributes.GENERIC_ARMOR_TOUGHNESS).getValue()); - damage = resistanceReduction(player, damage); + if (dist > 1.0) return 0; - ((IExplosion) explosion).set(crystal, 6, false); - damage = blastProtReduction(player, damage, explosion); + double aa = getExposure(pos, box, ignorePos, obbyPos, ignoreTerrain); + double ab = (1.0 - dist) * aa; - return damage < 0 ? 0 : damage; + return (float)((int)((ab * ab + ab) * 3.5 * q + 1.0)); } - public static float oldVerCrystal(PlayerEntity player, Box bb, Vec3d crystal, BlockPos ignore, boolean ignoreTerrain) { - ((IVec3d) vec3d).set((bb.minX + bb.maxX) / 2, bb.minY, (bb.minZ + bb.maxZ) / 2); - - double dist = vec3d.distanceTo(crystal) / 12; - if (dist > 1) return 0; + private static double explosionDamage(LivingEntity entity, Box box, Vec3d pos, BlockPos ignorePos, BlockPos obbyPos, boolean ignoreTerrain, double strength) { + if (box == null) return 0; - double exposure = getExposure(crystal, player, bb, raycastContext, ignore, ignoreTerrain); - double d10 = (1.0D - dist) * exposure; + double damage = getBaseDamage(box, pos, ignorePos, obbyPos, ignoreTerrain, strength); - float damage = (float)((int)((d10 * d10 + d10) / 2.0D * 7.0D * (double)12 + 1.0D)); - damage = (float) getDamageForDifficulty(damage); - - damage = getDamageAfterAbsorb(damage, (float)player.getArmor(), (float)player.getAttributeInstance(EntityAttributes.GENERIC_ARMOR_TOUGHNESS).getValue()); - damage = oldVerPotionReduce(player, damage); + damage = difficultyDamage(damage); + damage = applyArmor(entity, damage); + damage = applyResistance(entity, damage); + damage = applyProtection(entity, damage, true); return damage; } - public static float getDamageAfterAbsorb(float damage, float totalArmor, float toughnessAttribute) { - float f = 2.0F + toughnessAttribute / 4.0F; - float f1 = MathHelper.clamp(totalArmor - damage / f, totalArmor * 0.2F, 20.0F); - return damage * (1.0F - f1 / 25.0F); - } - + public static int getProtectionAmount(Iterable equipment, boolean explosion) { + MutableInt mint = new MutableInt(); - private static float oldVerPotionReduce(LivingEntity livingEntity, float damage) { - if (livingEntity.hasStatusEffect(StatusEffects.RESISTANCE)) { - int i = (livingEntity.getStatusEffect(StatusEffects.RESISTANCE).getAmplifier() + 1) * 5; - int j = 25 - i; - float f = damage * (float) j; - damage = f / 25.0F; - } + for (ItemStack stack : equipment) { + if (stack.isEmpty()) continue; - int k = getEnchantmentModifierDamage(livingEntity.getArmorItems()); + ItemEnchantmentsComponent enchantments = stack.getEnchantments(); - if (k > 0) - { - damage = getDamageAfterMagicAbsorb(damage, (float)k); + enchantments.getEnchantments().stream().forEach(entry -> { + int level = enchantments.getLevel(entry); + if (entry.matchesId(Enchantments.PROTECTION.getValue())) + mint.add(level); + else if (explosion && entry.matchesId(Enchantments.BLAST_PROTECTION.getValue())) + mint.add(level * 2); + }); } - return damage; + return mint.intValue(); } - private static int getEnchantmentModifierDamage(Iterable stacks) { - int i = 0; + public static double difficultyDamage(double damage) { + Difficulty difficulty = mc.world.getDifficulty(); + if (difficulty == Difficulty.EASY) return Math.min(damage / 2 + 1, damage); + if (difficulty == Difficulty.NORMAL) return damage; - for (ItemStack stack : stacks) { - i += sus(stack); - } - return i; + return damage * 1.5; } - private static int sus(ItemStack stack) { - int r = 0; - if (!stack.isEmpty()) { - - NbtList nbttaglist = stack.getEnchantments(); + public static double applyArmor(LivingEntity entity, double damage) { + double armor = entity.getArmor(); + double f = 2 + entity.getAttributeValue(EntityAttributes.GENERIC_ARMOR_TOUGHNESS) / 4; - for (int i = 0; i < nbttaglist.size(); ++i) - { - int j = nbttaglist.getCompound(i).getShort("id"); - int k = nbttaglist.getCompound(i).getShort("lvl") + 1; - Enchantment e = Enchantment.byRawId(j); - - - if (e != null) - { - if (e == Enchantments.BLAST_PROTECTION) { - r += k * 2; - } else if (e == Enchantments.PROTECTION) { - r += k; - } - } - } - } - return r; - } - - private static float getDamageAfterMagicAbsorb(float damage, float enchantModifiers) { - float f = MathHelper.clamp(enchantModifiers, 0.0F, 20.0F); - return damage * (1.0F - f / 25.0F); + return damage * (1 - MathHelper.clamp(armor - damage / f, armor * 0.2, 20) / 25); } - // Sword damage - public static double getSwordDamage(ItemStack stack, PlayerEntity player, PlayerEntity target, boolean charged) { - // Get sword damage - double damage = 0; - if (charged) { - if (stack.getItem() == Items.NETHERITE_SWORD) { - damage += 8; - } else if (stack.getItem() == Items.DIAMOND_SWORD) { - damage += 7; - } else if (stack.getItem() == Items.GOLDEN_SWORD) { - damage += 4; - } else if (stack.getItem() == Items.IRON_SWORD) { - damage += 6; - } else if (stack.getItem() == Items.STONE_SWORD) { - damage += 5; - } else if (stack.getItem() == Items.WOODEN_SWORD) { - damage += 4; - } - damage *= 1.5; - } - - if (stack.getEnchantments() != null) { - if (EnchantmentHelper.get(stack).containsKey(Enchantments.SHARPNESS)) { - int level = EnchantmentHelper.getLevel(Enchantments.SHARPNESS, stack); - damage += (0.5 * level) + 0.5; - } - } - - if (player.getActiveStatusEffects().containsKey(StatusEffects.STRENGTH)) { - int strength = Objects.requireNonNull(player.getStatusEffect(StatusEffects.STRENGTH)).getAmplifier() + 1; - damage += 3 * strength; - } - - // Reduce by resistance - damage = resistanceReduction(target, damage); - - // Reduce by armour - damage = DamageUtil.getDamageLeft((float) damage, (float) target.getArmor(), (float) target.getAttributeInstance(EntityAttributes.GENERIC_ARMOR_TOUGHNESS).getValue()); + public static double applyResistance(LivingEntity entity, double damage) { + int amplifier = entity.hasStatusEffect(StatusEffects.RESISTANCE) ? entity.getStatusEffect(StatusEffects.RESISTANCE).getAmplifier() : 0; - // Reduce by enchants - damage = normalProtReduction(target, damage); - - return damage < 0 ? 0 : damage; + int j = 25 - (amplifier + 1) * 5; + return Math.max(damage * j / 25, 0); } + public static double applyProtection(LivingEntity entity, double damage, boolean explosions) { + int i = getProtectionAmount(entity.getArmorItems(), explosions); + if (i > 0) + damage *= (1 - MathHelper.clamp(i, 0f, 20f) / 25); - // Bed damage - - public static double bedDamage(LivingEntity player, Box box, Vec3d bed, BlockPos ignore) { - if (player instanceof PlayerEntity && ((PlayerEntity) player).getAbilities().creativeMode) return 0; - - double modDistance = Math.sqrt(player.squaredDistanceTo(bed)); - if (modDistance > 10) return 0; - - double exposure = getExposure(bed, player, box, raycastContext, ignore, true); - double impact = (1.0 - (modDistance / 10.0)) * exposure; - double damage = (impact * impact + impact) / 2 * 7 * (5 * 2) + 1; - - // Multiply damage by difficulty - damage = getDamageForDifficulty(damage); - - // Reduce by resistance - damage = resistanceReduction(player, damage); - - // Reduce by armour - damage = DamageUtil.getDamageLeft((float) damage, (float) player.getArmor(), (float) player.getAttributeInstance(EntityAttributes.GENERIC_ARMOR_TOUGHNESS).getValue()); - - // Reduce by enchants - ((IExplosion) explosion).set(bed, 5, true); - damage = blastProtReduction(player, damage, explosion); - - if (damage < 0) damage = 0; return damage; } - // Anchor damage - - public static double anchorDamage(LivingEntity player, Box box, BlockPos anchor) { - return bedDamage(player, box, anchor.toCenterPos(), anchor); + public static double getExposure(Vec3d source, Box box) { + return getExposure(source, box, null, null, true); } - // Utils - - private static double getDamageForDifficulty(double damage) { - return switch (mc.world.getDifficulty()) { - case EASY -> Math.min(damage / 2 + 1, damage); - case HARD, PEACEFUL -> damage * 3 / 2; - default -> damage; - }; + public static double getExposure(Vec3d source, Box box, BlockPos ignorePos, boolean ignoreTerrain) { + return getExposure(source, box, ignorePos, null, ignoreTerrain); } - private static double normalProtReduction(Entity player, double damage) { - int protLevel = EnchantmentHelper.getProtectionAmount(player.getArmorItems(), mc.world.getDamageSources().generic()); - if (protLevel > 20) protLevel = 20; + public static double getExposure(Vec3d source, Box box, BlockPos ignorePos, BlockPos obbyPos, boolean ignoreTerrain) { + ((IRaycastContext) raycastContext).set(source, null, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); - damage *= 1 - (protLevel / 25.0); - return damage < 0 ? 0 : damage; - } + double lx = box.getLengthX(); + double ly = box.getLengthY(); + double lz = box.getLengthZ(); - private static double blastProtReduction(Entity player, double damage, Explosion explosion) { - int protLevel = EnchantmentHelper.getProtectionAmount(player.getArmorItems(), mc.world.getDamageSources().explosion(explosion)); - if (protLevel > 20) protLevel = 20; + double deltaX = 1 / (lx * 2 + 1); + double deltaY = 1 / (ly * 2 + 1); + double deltaZ = 1 / (lz * 2 + 1); - damage *= (1 - (protLevel / 25.0)); - return damage < 0 ? 0 : damage; - } + double offsetX = (1 - Math.floor(1 / deltaX) * deltaX) / 2; + double offsetZ = (1 - Math.floor(1 / deltaZ) * deltaZ) / 2; - private static double resistanceReduction(LivingEntity player, double damage) { - if (player.hasStatusEffect(StatusEffects.RESISTANCE)) { - int lvl = (player.getStatusEffect(StatusEffects.RESISTANCE).getAmplifier() + 1); - damage *= (1 - (lvl * 0.2)); - } + double stepX = deltaX * lx; + double stepY = deltaY * ly; + double stepZ = deltaZ * lz; - return damage < 0 ? 0 : damage; - } - - public static double getExposure(Vec3d source, Entity entity, Box box, RaycastContext raycastContext, BlockPos ignore, boolean ignoreTerrain) { - double d = 1 / ((box.maxX - box.minX) * 2 + 1); - double e = 1 / ((box.maxY - box.minY) * 2 + 1); - double f = 1 / ((box.maxZ - box.minZ) * 2 + 1); - double g = (1 - Math.floor(1 / d) * d) / 2; - double h = (1 - Math.floor(1 / f) * f) / 2; + if (stepX < 0 || stepY < 0 || stepZ < 0) return 0; - if (!(d < 0) && !(e < 0) && !(f < 0)) { - int i = 0; - int j = 0; + float i = 0; + float j = 0; - for (double k = 0; k <= 1; k += d) { - for (double l = 0; l <= 1; l += e) { - for (double m = 0; m <= 1; m += f) { - double n = MathHelper.lerp(k, box.minX, box.maxX); - double o = MathHelper.lerp(l, box.minY, box.maxY); - double p = MathHelper.lerp(m, box.minZ, box.maxZ); + for (double x = box.minX + offsetX, maxX = box.maxX + offsetX; x <= maxX; x += stepX) { + for (double y = box.minY; y <= box.maxY; y += stepY) { + for (double z = box.minZ + offsetZ, maxZ = box.maxZ + offsetZ; z <= maxZ; z += stepZ) { + Vec3d vec3d = new Vec3d(x, y, z); - ((IVec3d) vec3d).set(n + g, o, p + h); - ((IRaycastContext) raycastContext).set(vec3d, source, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, entity); + ((IRaycastContext) raycastContext).set(source, vec3d, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); + if (raycast(BODamageUtils.raycastContext, ignorePos, obbyPos, ignoreTerrain).getType() == HitResult.Type.MISS) ++i; - if (raycast(raycastContext, ignore, ignoreTerrain).getType() == HitResult.Type.MISS) i++; - - j++; - } + ++j; } } - - return (double) i / j; } - return 0; + return i / j; } public static BlockHitResult raycast(RaycastContext context) { - return BlockView.raycast(context.getStart(), context.getEnd(), context, (raycastContext, blockPos) -> { - BlockState blockState; - blockState = mc.world.getBlockState(blockPos); - - Vec3d vec3d = raycastContext.getStart(); - Vec3d vec3d2 = raycastContext.getEnd(); - - VoxelShape voxelShape = raycastContext.getBlockShape(blockState, mc.world, blockPos); - BlockHitResult blockHitResult = mc.world.raycastBlock(vec3d, vec3d2, blockPos, voxelShape, blockState); - VoxelShape voxelShape2 = VoxelShapes.empty(); - BlockHitResult blockHitResult2 = voxelShape2.raycast(vec3d, vec3d2, blockPos); + return raycast(context, false); + } - double d = blockHitResult == null ? Double.MAX_VALUE : raycastContext.getStart().squaredDistanceTo(blockHitResult.getPos()); - double e = blockHitResult2 == null ? Double.MAX_VALUE : raycastContext.getStart().squaredDistanceTo(blockHitResult2.getPos()); + public static BlockHitResult raycast(RaycastContext context, boolean ignoreTerrain) { + return raycast(context, null, null, ignoreTerrain); + } - return d <= e ? blockHitResult : blockHitResult2; - }, (raycastContext) -> { - Vec3d vec3d = raycastContext.getStart().subtract(raycastContext.getEnd()); - return BlockHitResult.createMissed(raycastContext.getEnd(), Direction.getFacing(vec3d.x, vec3d.y, vec3d.z), BlockPos.ofFloored(raycastContext.getEnd())); - }); + public static BlockHitResult raycast(RaycastContext context, BlockPos ignorePos, BlockPos obbyPos) { + return raycast(context, ignorePos, obbyPos, false); } - private static BlockHitResult raycast(RaycastContext context, BlockPos ignore, boolean ignoreTerrain) { - return BlockView.raycast(context.getStart(), context.getEnd(), context, (raycastContext, blockPos) -> { + public static BlockHitResult raycast(RaycastContext context,BlockPos ignorePos, BlockPos obbyPos, boolean ignoreTerrain) { + return BlockView.raycast(context.getStart(), context.getEnd(), context, (contextx, pos) -> { BlockState blockState; - if (blockPos.equals(ignore)) blockState = Blocks.AIR.getDefaultState(); + + if (pos.equals(obbyPos)) + blockState = Blocks.OBSIDIAN.getDefaultState(); + else if (pos.equals(ignorePos)) + blockState = Blocks.AIR.getDefaultState(); else { - blockState = mc.world.getBlockState(blockPos); - if (blockState.getBlock().getBlastResistance() < 600 && ignoreTerrain) - blockState = Blocks.AIR.getDefaultState(); - } + BlockState state = mc.world.getBlockState(pos); - Vec3d vec3d = raycastContext.getStart(); - Vec3d vec3d2 = raycastContext.getEnd(); + if (ignoreTerrain && state.getBlock().getBlastResistance() < 200) blockState = Blocks.AIR.getDefaultState(); + else blockState = state; + } - VoxelShape voxelShape = raycastContext.getBlockShape(blockState, mc.world, blockPos); - BlockHitResult blockHitResult = mc.world.raycastBlock(vec3d, vec3d2, blockPos, voxelShape, blockState); - VoxelShape voxelShape2 = VoxelShapes.empty(); - BlockHitResult blockHitResult2 = voxelShape2.raycast(vec3d, vec3d2, blockPos); + Vec3d vec3d = contextx.getStart(); + Vec3d vec3d2 = contextx.getEnd(); - double d = blockHitResult == null ? Double.MAX_VALUE : raycastContext.getStart().squaredDistanceTo(blockHitResult.getPos()); - double e = blockHitResult2 == null ? Double.MAX_VALUE : raycastContext.getStart().squaredDistanceTo(blockHitResult2.getPos()); + VoxelShape voxelShape = contextx.getBlockShape(blockState, mc.world, pos); - return d <= e ? blockHitResult : blockHitResult2; - }, (raycastContext) -> { - Vec3d vec3d = raycastContext.getStart().subtract(raycastContext.getEnd()); - return BlockHitResult.createMissed(raycastContext.getEnd(), Direction.getFacing(vec3d.x, vec3d.y, vec3d.z), BlockPos.ofFloored(raycastContext.getEnd())); + return mc.world.raycastBlock(vec3d, vec3d2, pos, voxelShape, blockState); + }, (contextx) -> { + Vec3d vec3d = contextx.getStart().subtract(contextx.getEnd()); + return BlockHitResult.createMissed(contextx.getEnd(), Direction.getFacing(vec3d.x, vec3d.y, vec3d.z), BlockPos.ofFloored(contextx.getEnd())); }); } } diff --git a/src/main/resources/blackout.accesswidener b/src/main/resources/blackout.accesswidener index f1ac78c..44b840d 100644 --- a/src/main/resources/blackout.accesswidener +++ b/src/main/resources/blackout.accesswidener @@ -1,3 +1,7 @@ accessWidener v1 named accessible method net/minecraft/client/network/ClientPlayerInteractionManager sendSequencedPacket (Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/client/network/SequencedPacketCreator;)V accessible method net/minecraft/client/world/ClientWorld getPendingUpdateManager ()Lnet/minecraft/client/network/PendingUpdateManager; + +accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractType +accessible class net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractTypeHandler +accessible method net/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractTypeHandler getType ()Lnet/minecraft/network/packet/c2s/play/PlayerInteractEntityC2SPacket$InteractType; diff --git a/src/main/resources/blackout.mixins.json b/src/main/resources/blackout.mixins.json index a798863..90dc7a3 100644 --- a/src/main/resources/blackout.mixins.json +++ b/src/main/resources/blackout.mixins.json @@ -27,6 +27,7 @@ "defaultRequire": 1 }, "mixins": [ + "AccessorNbtCompound", "MixinClientConnection" ] }