Skip to content

Commit

Permalink
Cleaned source code tree
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianMichael committed Nov 27, 2023
1 parent 93c2abf commit b8152d1
Show file tree
Hide file tree
Showing 56 changed files with 171 additions and 299 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@

import net.minecraft.util.ActionResult;

public class ActionResultException extends RuntimeException {
public class ActionResultException1_12_2 extends RuntimeException {

private final ActionResult actionResult;

public ActionResultException(final ActionResult actionResult) {
public ActionResultException1_12_2(final ActionResult actionResult) {
this.actionResult = actionResult;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

import java.util.UUID;

public class ArmorUpdateListener {
public class ArmorHudEmulation1_8 {

private static final UUID ARMOR_POINTS_UUID = UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150");

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,37 +21,19 @@

import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import de.florianmichael.viafabricplus.protocolhack.translator.BlockStateTranslator;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.client.MinecraftClient;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec2f;
import net.minecraft.util.math.Vec3d;
import net.raphimc.vialoader.util.VersionEnum;
import org.apache.commons.lang3.tuple.Pair;

import java.util.function.Consumer;

public class ClientPlayerInteractionManager1_18_2 {

public static final Consumer<PacketByteBuf> OLD_PACKET_HANDLER = data -> {
try {
final var pos = data.readBlockPos();
final var blockState = BlockStateTranslator.via1_18_2toMc(data.readVarInt());
final var action = data.readEnumConstant(PlayerActionC2SPacket.Action.class);
final var allGood = data.readBoolean();

ClientPlayerInteractionManager1_18_2.handleBlockBreakAck(pos, blockState, action, allGood);
} catch (Throwable t) {
throw new RuntimeException("Failed to handle BlockBreakAck packet data", t);
}
};

private static final Object2ObjectLinkedOpenHashMap<Pair<BlockPos, PlayerActionC2SPacket.Action>, PositionAndRotation> UNACKED_ACTIONS = new Object2ObjectLinkedOpenHashMap<>();
private static final Object2ObjectLinkedOpenHashMap<Pair<BlockPos, PlayerActionC2SPacket.Action>, Pair<Vec3d, Vec2f>> UN_ACKED_ACTIONS = new Object2ObjectLinkedOpenHashMap<>();

public static void trackPlayerAction(final PlayerActionC2SPacket.Action action, final BlockPos blockPos) {
final var player = MinecraftClient.getInstance().player;
Expand All @@ -63,40 +45,37 @@ public static void trackPlayerAction(final PlayerActionC2SPacket.Action action,
} else {
rotation = new Vec2f(player.getYaw(), player.getPitch());
}
UNACKED_ACTIONS.put(Pair.of(blockPos, action), new PositionAndRotation(player.getPos(), rotation));
UN_ACKED_ACTIONS.put(Pair.of(blockPos, action), Pair.of(player.getPos(), rotation));
}

public static void handleBlockBreakAck(final BlockPos blockPos, final BlockState expectedState, final PlayerActionC2SPacket.Action action, final boolean allGood) {
final var player = MinecraftClient.getInstance().player;
if (player == null) return;
final var world = MinecraftClient.getInstance().getNetworkHandler().getWorld();

final var oldPlayerState = UNACKED_ACTIONS.remove(Pair.of(blockPos, action));
final var oldPlayerState = UN_ACKED_ACTIONS.remove(Pair.of(blockPos, action));
final var actualState = world.getBlockState(blockPos);

if ((oldPlayerState == null || !allGood || action != PlayerActionC2SPacket.Action.START_DESTROY_BLOCK && actualState != expectedState) && (actualState != expectedState || ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_15_2))) {
world.setBlockState(blockPos, expectedState, Block.NOTIFY_ALL | Block.FORCE_STATE);
if (oldPlayerState != null && (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_16_1) || (world == player.getWorld() && player.collidesWithStateAtPos(blockPos, expectedState)))) {
final Vec3d oldPlayerPosition = oldPlayerState.position;
if (oldPlayerState.rotation != null) {
player.updatePositionAndAngles(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z, oldPlayerState.rotation.x, oldPlayerState.rotation.y);
final Vec3d oldPlayerPosition = oldPlayerState.getKey();
if (oldPlayerState.getValue() != null) {
player.updatePositionAndAngles(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z, oldPlayerState.getValue().x, oldPlayerState.getValue().y);
} else {
player.updatePosition(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z);
}
}
}

while (UNACKED_ACTIONS.size() >= 50) {
ViaFabricPlus.global().getLogger().warn("Too many unacked block actions, dropping {}", UNACKED_ACTIONS.firstKey());
UNACKED_ACTIONS.removeFirst();
while (UN_ACKED_ACTIONS.size() >= 50) {
ViaFabricPlus.global().getLogger().warn("Too many unacked block actions, dropping {}", UN_ACKED_ACTIONS.firstKey());
UN_ACKED_ACTIONS.removeFirst();
}
}

public static void clearUnackedActions() {
UNACKED_ACTIONS.clear();
}

private record PositionAndRotation(Vec3d position, Vec2f rotation) {
UN_ACKED_ACTIONS.clear();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@
import de.florianmichael.viafabricplus.event.DisconnectCallback;
import de.florianmichael.viafabricplus.event.LoadClassicProtocolExtensionCallback;
import de.florianmichael.viafabricplus.event.PostGameLoadCallback;
import de.florianmichael.viafabricplus.fixes.entity.EntityDimensionReplacements;
import de.florianmichael.viafabricplus.fixes.classic.CustomClassicProtocolExtensions;
import de.florianmichael.viafabricplus.fixes.classic.screen.ClassicItemSelectionScreen;
import de.florianmichael.viafabricplus.fixes.classic.ClassicItemSelectionScreen;
import de.florianmichael.viafabricplus.injection.ViaFabricPlusMixinPlugin;
import de.florianmichael.viafabricplus.protocolhack.provider.vialegacy.ViaFabricPlusClassicMPPassProvider;
import net.minecraft.block.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.FontStorage;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.registry.Registries;
import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_28_30cpe.data.ClassicProtocolExtension;
import net.raphimc.vialoader.util.VersionEnum;

Expand Down Expand Up @@ -60,15 +63,19 @@ public class ClientsideFixes {

public static void init() {
CustomClassicProtocolExtensions.create();

PostGameLoadCallback.EVENT.register(() -> {
EntityHitboxUpdateListener.init();
ArmorUpdateListener.init();
BlockFixes.init();
// Handles and updates entity dimension changes in <= 1.17
EntityDimensionReplacements.init();

// Ticks the armor hud manually in <= 1.8.x
ArmorHudEmulation1_8.init();
});

DisconnectCallback.EVENT.register(() -> {
// Reset the MP-pass
ViaFabricPlusClassicMPPassProvider.classiCubeMPPass = null;

// Remove all previous unacked player actions
ClientPlayerInteractionManager1_18_2.clearUnackedActions();
});
Expand All @@ -86,16 +93,34 @@ public static void init() {
currentChatLength = 256;
}

// Text Renderer invisible character fix
if (!ViaFabricPlusMixinPlugin.DASH_LOADER_PRESENT) {
// Clear all font caches to enforce a reload of all fonts (this is needed because we change the font renderer behavior)
for (FontStorage storage : MinecraftClient.getInstance().fontManager.fontStorages.values()) {
storage.glyphRendererCache.clear();
storage.glyphCache.clear();
}
}

// Reloads all bounding boxes of the blocks that we changed
for (Block block : Registries.BLOCK) {
if (block instanceof AnvilBlock || block instanceof BedBlock || block instanceof BrewingStandBlock
|| block instanceof CarpetBlock || block instanceof CauldronBlock || block instanceof ChestBlock
|| block instanceof EnderChestBlock || block instanceof EndPortalBlock || block instanceof EndPortalFrameBlock
|| block instanceof FarmlandBlock || block instanceof FenceBlock || block instanceof FenceGateBlock
|| block instanceof HopperBlock || block instanceof LadderBlock || block instanceof LeavesBlock
|| block instanceof LilyPadBlock || block instanceof PaneBlock || block instanceof PistonBlock
|| block instanceof PistonHeadBlock || block instanceof SnowBlock || block instanceof WallBlock
|| block instanceof CropBlock || block instanceof FlowerbedBlock
) {
for (BlockState state : block.getStateManager().getStates()) {
state.initShapeCache();
}
}
}

// Rebuilds the item selection screen grid
if (newVersion.isOlderThanOrEqualTo(VersionEnum.c0_28toc0_30)) {
ClassicItemSelectionScreen.INSTANCE.reload(newVersion, false);
ClassicItemSelectionScreen.INSTANCE.rebuildGridOverlay();
}
}));

Expand Down
Loading

0 comments on commit b8152d1

Please sign in to comment.