diff --git a/build.gradle b/build.gradle index a65723a..df015f7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.5-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.4-SNAPSHOT" apply false } architectury { diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/KnockdownsClient.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/KnockdownsClient.java index 2fcfc82..1b4272f 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/KnockdownsClient.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/KnockdownsClient.java @@ -9,9 +9,10 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; import org.jetbrains.annotations.Nullable; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; +import ru.octol1ttle.knockdowns.common.events.KnockdownsClientEvents; import ru.octol1ttle.knockdowns.common.network.KnockdownsNetwork; -import ru.octol1ttle.knockdowns.common.network.packets.reviving.RequestStartRevivingC2SPacket; -import ru.octol1ttle.knockdowns.common.network.packets.reviving.StopRevivingC2SPacket; +import ru.octol1ttle.knockdowns.common.network.packets.RequestStartRevivingC2SPacket; +import ru.octol1ttle.knockdowns.common.network.packets.StopRevivingC2SPacket; import ru.octol1ttle.knockdowns.common.registries.KnockdownsSoundEvents; import ru.octol1ttle.knockdowns.common.registries.KnockedDownSoundInstance; @@ -20,6 +21,7 @@ public class KnockdownsClient { public static Entity reviving; public static void init() { + KnockdownsClientEvents.registerCallbacks(); } public static void playKnockedDownSound(Vec3d pos) { diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/api/RemotePlayer.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/api/RemotePlayer.java deleted file mode 100644 index ee3a056..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/api/RemotePlayer.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.octol1ttle.knockdowns.common.api; - -import net.minecraft.util.math.Vec3d; - -public record RemotePlayer(Vec3d eyePosition, boolean knockedDown) { } diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsClientEvents.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsClientEvents.java index 207d8ee..47ec31d 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsClientEvents.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsClientEvents.java @@ -1,138 +1,44 @@ package ru.octol1ttle.knockdowns.common.events; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; +import dev.architectury.event.events.client.ClientGuiEvent; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.PlayerSkinDrawer; -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.RaycastContext; import ru.octol1ttle.knockdowns.common.KnockdownsClient; -import ru.octol1ttle.knockdowns.common.KnockdownsCommon; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; -import ru.octol1ttle.knockdowns.common.api.RemotePlayer; -import ru.octol1ttle.knockdowns.common.network.KnockdownsNetwork; -import ru.octol1ttle.knockdowns.common.network.packets.position.RequestRemotePlayerC2SPacket; -import ru.octol1ttle.knockdowns.common.util.RendererUtilsCopy; -import ru.octol1ttle.knockdowns.common.util.ScreenSpaceTransformResult; public class KnockdownsClientEvents { - public static void onHudRender(DrawContext context) { - renderReviveText(context); - renderPlayerIcons(context); + public static void registerCallbacks() { + registerOnHudRender(); } - private static void renderReviveText(DrawContext context) { - IKnockableDown reviving = (IKnockableDown) KnockdownsClient.reviving; - MinecraftClient client = MinecraftClient.getInstance(); - if (reviving == null) { - reviving = (IKnockableDown) client.player; - if (reviving == null || reviving.get_ReviveTimer() == KnockdownsCommon.REVIVE_WAIT_TIME) { - return; - } - } - - TextRenderer renderer = client.textRenderer; - - String timerText = String.format("%.1f", reviving.get_ReviveTimer() / (float) SharedConstants.TICKS_PER_SECOND); - int timerX = (context.getScaledWindowWidth() - renderer.getWidth(timerText)) / 2; - - int reviverCount = reviving.get_ReviverCount(); - Integer color; - if (reviverCount == 0) { - color = Formatting.RED.getColorValue(); - } else if (reviverCount == 1) { - color = Formatting.WHITE.getColorValue(); - } else { - color = Formatting.GREEN.getColorValue(); - } - - String reviverCountText = "x" + reviverCount; - int reviveCountX = (context.getScaledWindowWidth() - renderer.getWidth(reviverCountText)) / 2; - - if (color != null) { - context.drawTextWithShadow(renderer, timerText, timerX, context.getScaledWindowHeight() / 2 + 5, color); - context.drawTextWithShadow(renderer, reviverCountText, reviveCountX, context.getScaledWindowHeight() / 2 + 14, color); - } - } - - public static final Map> remotePlayers = new HashMap<>(); - private static final Identifier KNOCKED_ICON_ID = new Identifier("knockdowns", "textures/knocked_icon.png"); - @SuppressWarnings("DataFlowIssue") - private static void renderPlayerIcons(DrawContext context) { - MinecraftClient client = MinecraftClient.getInstance(); - - Collection entries = client.player.networkHandler.getListedPlayerListEntries(); - for (PlayerListEntry entry : entries) { - UUID id = entry.getProfile().getId(); - PlayerEntity player = client.world.getPlayerByUuid(id); - if (client.player.equals(player)) { - continue; - } - - Vec3d eyePosition; - boolean knockedDown; - if (player != null) { - remotePlayers.remove(id); - - eyePosition = player.getEyePos(); - knockedDown = ((IKnockableDown) player).is_KnockedDown(); - } else { - Optional remote = remotePlayers.get(id); - if (remote != null) { - if (remote.isEmpty()) { - continue; - } - - eyePosition = remote.get().eyePosition(); - knockedDown = remote.get().knockedDown(); - } else { - remotePlayers.put(id, Optional.empty()); - KnockdownsNetwork.sendToServer(new RequestRemotePlayerC2SPacket(id)); - continue; + private static void registerOnHudRender() { + ClientGuiEvent.RENDER_HUD.register((drawContext, tickDelta) -> { + IKnockableDown reviving = (IKnockableDown) KnockdownsClient.reviving; + MinecraftClient client = MinecraftClient.getInstance(); + if (reviving == null) { + reviving = (IKnockableDown) client.player; + if (reviving == null || reviving.get_ReviverCount() == 0) { + return; } } - ScreenSpaceTransformResult result = RendererUtilsCopy.worldSpaceToScreenSpace(eyePosition); - int size = 16; + TextRenderer renderer = client.textRenderer; - int width = context.getScaledWindowWidth(); - int x = MathHelper.clamp(MathHelper.floor(result.vec().x - size * 0.5), size + 5, width - size - 5); + String timerText = String.format("%.1f", reviving.get_ReviveTimer() / (float) SharedConstants.TICKS_PER_SECOND); + int timerX = (drawContext.getScaledWindowWidth() - renderer.getWidth(timerText)) / 2; - int height = context.getScaledWindowHeight(); - int y = MathHelper.clamp(MathHelper.floor(result.vec().y - size * 0.5), size + 5, height - size - 5); + int reviverCount = reviving.get_ReviverCount(); + Integer color = reviverCount > 1 ? Formatting.GREEN.getColorValue() : Formatting.WHITE.getColorValue(); - if (result.type() != ScreenSpaceTransformResult.TransformType.ON_SCREEN - || client.player.getEyePos().distanceTo(eyePosition) > 64.0 - || client.world - .raycast(new RaycastContext( - client.getEntityRenderDispatcher().camera.getPos(), - eyePosition, - RaycastContext.ShapeType.VISUAL, - RaycastContext.FluidHandling.SOURCE_ONLY, - client.player - )).getType() == HitResult.Type.BLOCK) - { - PlayerSkinDrawer.draw(context, entry.getSkinTexture(), x, y, size, true, false); + String reviverCountText = "x" + reviverCount; + int reviveCountX = (drawContext.getScaledWindowWidth() - renderer.getWidth(reviverCountText)) / 2; + + if (color != null) { + drawContext.drawTextWithShadow(renderer, timerText, timerX, drawContext.getScaledWindowHeight() / 2 + 5, color); + drawContext.drawTextWithShadow(renderer, reviverCountText, reviveCountX, drawContext.getScaledWindowHeight() / 2 + 14, color); } - - if (knockedDown) { - context.drawTexture(KNOCKED_ICON_ID, x, y, size, size, 0, 0, 18, 18, 18, 18); - } - if (client.player.age % 20 == 0 && remotePlayers.containsKey(id)) { - KnockdownsNetwork.sendToServer(new RequestRemotePlayerC2SPacket(id)); - } - } + }); } } diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java index 674da07..06748e2 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/events/KnockdownsEvents.java @@ -21,8 +21,6 @@ import ru.octol1ttle.knockdowns.common.KnockdownsUtils; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; import ru.octol1ttle.knockdowns.common.network.KnockdownsNetwork; import ru.octol1ttle.knockdowns.common.network.packets.PlayKnockedDownSoundS2CPacket; -import ru.octol1ttle.knockdowns.common.network.packets.position.RemotePlayerDimensionChangeS2CPacket; -import ru.octol1ttle.knockdowns.common.network.packets.position.RemotePlayerS2CPacket; public class KnockdownsEvents { private static final float KNOCKED_INVULNERABILITY_TICKS = 3.0f * SharedConstants.TICKS_PER_SECOND; @@ -34,7 +32,6 @@ public class KnockdownsEvents { registerOnPlayerTick(); registerOnPlayerInteractions(); registerOnEntityUse(); - registerOnDimensionChange(); } private static void registerOnLivingDeath() { @@ -54,6 +51,7 @@ public class KnockdownsEvents { entity.clearStatusEffects(); entity.setInvulnerable(true); + entity.setGlowing(true); entity.setHealth(entity.getMaxHealth()); entity.extinguish(); entity.setAir(entity.getMaxAir()); @@ -101,6 +99,7 @@ public class KnockdownsEvents { KnockdownsUtils.resetKnockedState(knockable); player.setInvulnerable(false); + player.setGlowing(false); player.setHealth(player.getMaxHealth() * 0.3f); } return; @@ -116,14 +115,6 @@ public class KnockdownsEvents { }); } - private static void registerOnDimensionChange() { - PlayerEvent.CHANGE_DIMENSION.register((player, oldLevel, newLevel) -> { - //noinspection DataFlowIssue - KnockdownsNetwork.sendToWorld(player.getServer().getWorld(oldLevel), new RemotePlayerDimensionChangeS2CPacket(player.getUuid())); - KnockdownsNetwork.sendToWorld(player.getServerWorld(), new RemotePlayerS2CPacket(player.getUuid(), player.getEyePos(), ((IKnockableDown)player).is_KnockedDown())); - }); - } - private static void registerOnPlayerInteractions() { InteractionEvent.LEFT_CLICK_BLOCK.register((player, hand, pos, direction) -> { if (KnockdownsUtils.isKnockedOrReviving(player)) { diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/GameRendererMixin.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/GameRendererMixin.java deleted file mode 100644 index b47fc94..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/GameRendererMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.octol1ttle.knockdowns.common.mixin.client; - -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.util.math.MatrixStack; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.octol1ttle.knockdowns.common.util.RendererUtilsCopy; - -@Mixin(GameRenderer.class) -public abstract class GameRendererMixin { - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z", opcode = Opcodes.GETFIELD, ordinal = 0), method = "renderWorld") - void renderer_postWorldRender(float tickDelta, long limitTime, MatrixStack matrix, CallbackInfo ci) { - RendererUtilsCopy.lastProjMat.set(RenderSystem.getProjectionMatrix()); - RendererUtilsCopy.lastModMat.set(RenderSystem.getModelViewMatrix()); - RendererUtilsCopy.lastWorldSpaceMatrix.set(matrix.peek().getPositionMatrix()); - } -} diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/InGameHudMixin.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/InGameHudMixin.java deleted file mode 100644 index a00cf16..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/mixin/client/InGameHudMixin.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.octol1ttle.knockdowns.common.mixin.client; - -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.InGameHud; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.octol1ttle.knockdowns.common.events.KnockdownsClientEvents; - -@Mixin(InGameHud.class) -public abstract class InGameHudMixin { - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;getCurrentGameMode()Lnet/minecraft/world/GameMode;", ordinal = 0)) - public void render(DrawContext drawContext, float tickDelta, CallbackInfo callbackInfo) { - KnockdownsClientEvents.onHudRender(drawContext); - } -} diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/KnockdownsNetwork.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/KnockdownsNetwork.java index 7501dcb..8544efb 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/KnockdownsNetwork.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/KnockdownsNetwork.java @@ -9,23 +9,15 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; import ru.octol1ttle.knockdowns.common.KnockdownsCommon; import ru.octol1ttle.knockdowns.common.network.packets.PlayKnockedDownSoundS2CPacket; -import ru.octol1ttle.knockdowns.common.network.packets.position.RemotePlayerDimensionChangeS2CPacket; -import ru.octol1ttle.knockdowns.common.network.packets.position.RemotePlayerS2CPacket; -import ru.octol1ttle.knockdowns.common.network.packets.position.RequestRemotePlayerC2SPacket; -import ru.octol1ttle.knockdowns.common.network.packets.reviving.RequestStartRevivingC2SPacket; -import ru.octol1ttle.knockdowns.common.network.packets.reviving.StopRevivingC2SPacket; +import ru.octol1ttle.knockdowns.common.network.packets.RequestStartRevivingC2SPacket; +import ru.octol1ttle.knockdowns.common.network.packets.StopRevivingC2SPacket; public class KnockdownsNetwork { private static final NetworkChannel CHANNEL = NetworkChannel.create(new Identifier(KnockdownsCommon.MOD_ID, "main")); public static void registerPackets() { CHANNEL.register(PlayKnockedDownSoundS2CPacket.class, PlayKnockedDownSoundS2CPacket::encode, PlayKnockedDownSoundS2CPacket::new, PlayKnockedDownSoundS2CPacket::apply); - CHANNEL.register(RequestStartRevivingC2SPacket.class, RequestStartRevivingC2SPacket::encode, RequestStartRevivingC2SPacket::new, RequestStartRevivingC2SPacket::apply); CHANNEL.register(StopRevivingC2SPacket.class, StopRevivingC2SPacket::encode, StopRevivingC2SPacket::new, StopRevivingC2SPacket::apply); - - CHANNEL.register(RequestRemotePlayerC2SPacket.class, RequestRemotePlayerC2SPacket::encode, RequestRemotePlayerC2SPacket::new, RequestRemotePlayerC2SPacket::apply); - CHANNEL.register(RemotePlayerS2CPacket.class, RemotePlayerS2CPacket::encode, RemotePlayerS2CPacket::new, RemotePlayerS2CPacket::apply); - CHANNEL.register(RemotePlayerDimensionChangeS2CPacket.class, RemotePlayerDimensionChangeS2CPacket::encode, RemotePlayerDimensionChangeS2CPacket::new, RemotePlayerDimensionChangeS2CPacket::apply); } public static void sendToServer(T message) { diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/RequestStartRevivingC2SPacket.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/RequestStartRevivingC2SPacket.java similarity index 90% rename from common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/RequestStartRevivingC2SPacket.java rename to common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/RequestStartRevivingC2SPacket.java index 1894271..31a7de0 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/RequestStartRevivingC2SPacket.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/RequestStartRevivingC2SPacket.java @@ -1,4 +1,4 @@ -package ru.octol1ttle.knockdowns.common.network.packets.reviving; +package ru.octol1ttle.knockdowns.common.network.packets; import dev.architectury.networking.NetworkManager; import java.util.UUID; @@ -6,7 +6,6 @@ import java.util.function.Supplier; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.PacketByteBuf; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; -import ru.octol1ttle.knockdowns.common.network.packets.KnockdownsPacket; public class RequestStartRevivingC2SPacket extends KnockdownsPacket { private final UUID targetUuid; diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/StopRevivingC2SPacket.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/StopRevivingC2SPacket.java similarity index 91% rename from common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/StopRevivingC2SPacket.java rename to common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/StopRevivingC2SPacket.java index a890e05..260cc1e 100644 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/reviving/StopRevivingC2SPacket.java +++ b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/StopRevivingC2SPacket.java @@ -1,4 +1,4 @@ -package ru.octol1ttle.knockdowns.common.network.packets.reviving; +package ru.octol1ttle.knockdowns.common.network.packets; import dev.architectury.networking.NetworkManager; import java.util.UUID; @@ -6,7 +6,6 @@ import java.util.function.Supplier; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.PacketByteBuf; import ru.octol1ttle.knockdowns.common.api.IKnockableDown; -import ru.octol1ttle.knockdowns.common.network.packets.KnockdownsPacket; public class StopRevivingC2SPacket extends KnockdownsPacket { private final UUID targetUuid; diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerDimensionChangeS2CPacket.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerDimensionChangeS2CPacket.java deleted file mode 100644 index ecf0d1f..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerDimensionChangeS2CPacket.java +++ /dev/null @@ -1,32 +0,0 @@ -package ru.octol1ttle.knockdowns.common.network.packets.position; - -import dev.architectury.networking.NetworkManager; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Supplier; -import net.minecraft.network.PacketByteBuf; -import ru.octol1ttle.knockdowns.common.events.KnockdownsClientEvents; -import ru.octol1ttle.knockdowns.common.network.packets.KnockdownsPacket; - -public class RemotePlayerDimensionChangeS2CPacket extends KnockdownsPacket { - private final UUID targetUuid; - - public RemotePlayerDimensionChangeS2CPacket(PacketByteBuf buf) { - this(buf.readUuid()); - } - - public RemotePlayerDimensionChangeS2CPacket(UUID targetUuid) { - this.targetUuid = targetUuid; - } - - @Override - public void encode(PacketByteBuf buf) { - buf.writeUuid(this.targetUuid); - } - - @Override - public void apply(Supplier contextSupplier) { - NetworkManager.PacketContext context = contextSupplier.get(); - context.queue(() -> KnockdownsClientEvents.remotePlayers.put(targetUuid, Optional.empty())); - } -} diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerS2CPacket.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerS2CPacket.java deleted file mode 100644 index ccd5ddc..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RemotePlayerS2CPacket.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.octol1ttle.knockdowns.common.network.packets.position; - -import dev.architectury.networking.NetworkManager; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Supplier; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.math.Vec3d; -import ru.octol1ttle.knockdowns.common.api.RemotePlayer; -import ru.octol1ttle.knockdowns.common.events.KnockdownsClientEvents; -import ru.octol1ttle.knockdowns.common.network.packets.KnockdownsPacket; - -public class RemotePlayerS2CPacket extends KnockdownsPacket { - private final UUID targetUuid; - private final Vec3d eyePosition; - private final boolean knockedDown; - - public RemotePlayerS2CPacket(PacketByteBuf buf) { - this(buf.readUuid(), new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()), buf.readBoolean()); - } - - public RemotePlayerS2CPacket(UUID targetUuid, Vec3d eyePosition, boolean knockedDown) { - this.targetUuid = targetUuid; - this.eyePosition = eyePosition; - this.knockedDown = knockedDown; - } - - @Override - public void encode(PacketByteBuf buf) { - buf.writeUuid(this.targetUuid); - buf.writeDouble(this.eyePosition.x); - buf.writeDouble(this.eyePosition.y); - buf.writeDouble(this.eyePosition.z); - buf.writeBoolean(this.knockedDown); - } - - @Override - public void apply(Supplier contextSupplier) { - NetworkManager.PacketContext context = contextSupplier.get(); - context.queue(() -> { - //noinspection DataFlowIssue - if (MinecraftClient.getInstance().player.getUuid().equals(targetUuid)) { - KnockdownsClientEvents.remotePlayers.clear(); - } else { - KnockdownsClientEvents.remotePlayers.put(targetUuid, Optional.of(new RemotePlayer(this.eyePosition, this.knockedDown))); - } - }); - } -} diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RequestRemotePlayerC2SPacket.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RequestRemotePlayerC2SPacket.java deleted file mode 100644 index 756a436..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/network/packets/position/RequestRemotePlayerC2SPacket.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.octol1ttle.knockdowns.common.network.packets.position; - -import dev.architectury.networking.NetworkManager; -import java.util.UUID; -import java.util.function.Supplier; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.PacketByteBuf; -import ru.octol1ttle.knockdowns.common.api.IKnockableDown; -import ru.octol1ttle.knockdowns.common.network.KnockdownsNetwork; -import ru.octol1ttle.knockdowns.common.network.packets.KnockdownsPacket; - -public class RequestRemotePlayerC2SPacket extends KnockdownsPacket { - private final UUID targetUuid; - - public RequestRemotePlayerC2SPacket(PacketByteBuf buf) { - this(buf.readUuid()); - } - - public RequestRemotePlayerC2SPacket(UUID targetUuid) { - this.targetUuid = targetUuid; - } - - @Override - public void encode(PacketByteBuf buf) { - buf.writeUuid(this.targetUuid); - } - - @Override - public void apply(Supplier contextSupplier) { - NetworkManager.PacketContext context = contextSupplier.get(); - context.queue(() -> { - PlayerEntity sender = context.getPlayer(); - PlayerEntity target = sender.getEntityWorld().getPlayerByUuid(targetUuid); - if (target != null) { - KnockdownsNetwork.sendToPlayer(context.getPlayer(), new RemotePlayerS2CPacket(targetUuid, target.getEyePos(), ((IKnockableDown)target).is_KnockedDown())); - } - }); - } -} diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/util/RendererUtilsCopy.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/util/RendererUtilsCopy.java deleted file mode 100644 index d0aa48c..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/util/RendererUtilsCopy.java +++ /dev/null @@ -1,75 +0,0 @@ -package ru.octol1ttle.knockdowns.common.util; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.Camera; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.joml.Matrix4f; -import org.joml.Vector2d; -import org.joml.Vector3f; -import org.joml.Vector4f; -import org.lwjgl.opengl.GL11; - -/** - * @author 0x3C50 - *

Utils for rendering in minecraft

- */ -public class RendererUtilsCopy { - @ApiStatus.Internal - public static final Matrix4f lastProjMat = new Matrix4f(); - @ApiStatus.Internal - public static final Matrix4f lastModMat = new Matrix4f(); - @ApiStatus.Internal - public static final Matrix4f lastWorldSpaceMatrix = new Matrix4f(); - private static final MinecraftClient client = MinecraftClient.getInstance(); - - @Contract(value = "_ -> new", pure = true) - public static ScreenSpaceTransformResult worldSpaceToScreenSpace(@NotNull Vec3d pos) { - Camera camera = client.getEntityRenderDispatcher().camera; - - double deltaX = pos.x - camera.getPos().x; - double deltaY = pos.y - camera.getPos().y; - double deltaZ = pos.z - camera.getPos().z; - - Vector4f transformedCoordinates = new Vector4f((float) deltaX, (float) deltaY, (float) deltaZ, 1.f).mul( - lastWorldSpaceMatrix); - - Matrix4f matrixProj = new Matrix4f(lastProjMat); - - Vector4f clip = matrixProj.transform(new Vector4f(transformedCoordinates)); - if (clip.z > 0 && Math.abs(clip.x) < Math.abs(clip.w) && Math.abs(clip.y) < Math.abs(clip.w)) { - int[] viewport = new int[4]; - GL11.glGetIntegerv(GL11.GL_VIEWPORT, viewport); - Matrix4f matrixModel = new Matrix4f(lastModMat); - Vector3f target = new Vector3f(); - - matrixProj - .mul(matrixModel) - .project(transformedCoordinates.x(), transformedCoordinates.y(), transformedCoordinates.z(), viewport, target); - - return new ScreenSpaceTransformResult( - new Vector2d( - target.x / client.getWindow().getScaleFactor(), - (client.getWindow().getHeight() - target.y) / client.getWindow().getScaleFactor() - ), - ScreenSpaceTransformResult.TransformType.ON_SCREEN - ); - } - - clip.normalize(); - double angle = Math.atan2(clip.y, clip.x); - double width = client.getWindow().getScaledWidth(); - double height = client.getWindow().getScaledHeight(); - - double x = MathHelper.clamp(Math.cos(angle) * width + width / 2, 0.0f, width); - double y = height - (MathHelper.clamp(Math.sin(angle) * height + height / 2, 0.0f, height)); - - return new ScreenSpaceTransformResult( - new Vector2d(x, y), - ScreenSpaceTransformResult.TransformType.STUCK_TO_EDGES - ); - } -} \ No newline at end of file diff --git a/common/src/main/java/ru/octol1ttle/knockdowns/common/util/ScreenSpaceTransformResult.java b/common/src/main/java/ru/octol1ttle/knockdowns/common/util/ScreenSpaceTransformResult.java deleted file mode 100644 index ac64f62..0000000 --- a/common/src/main/java/ru/octol1ttle/knockdowns/common/util/ScreenSpaceTransformResult.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.octol1ttle.knockdowns.common.util; - -import org.joml.Vector2d; - -public record ScreenSpaceTransformResult(Vector2d vec, TransformType type) { - public enum TransformType { - ON_SCREEN, - STUCK_TO_EDGES - } -} diff --git a/common/src/main/resources/assets/knockdowns/textures/knocked_icon.png b/common/src/main/resources/assets/knockdowns/textures/knocked_icon.png deleted file mode 100644 index d61f41c..0000000 Binary files a/common/src/main/resources/assets/knockdowns/textures/knocked_icon.png and /dev/null differ diff --git a/common/src/main/resources/knockdowns-common.mixins.json b/common/src/main/resources/knockdowns-common.mixins.json index 99e53cc..b157b56 100644 --- a/common/src/main/resources/knockdowns-common.mixins.json +++ b/common/src/main/resources/knockdowns-common.mixins.json @@ -4,9 +4,7 @@ "compatibilityLevel": "JAVA_17", "minVersion": "0.8", "client": [ - "client.ClientPlayerEntityMixin", - "client.GameRendererMixin", - "client.InGameHudMixin" + "client.ClientPlayerEntityMixin" ], "mixins": [ "LivingEntityMixin", diff --git a/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsClientForge.java b/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsClientForge.java deleted file mode 100644 index 5e25e19..0000000 --- a/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsClientForge.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.octol1ttle.knockdowns.forge; - -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderGuiEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import ru.octol1ttle.knockdowns.common.KnockdownsClient; - -@SuppressWarnings("unused") -@Mod.EventBusSubscriber(modid = "knockdowns", bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) -public class KnockdownsClientForge { - @SubscribeEvent - public void onInitializeClient(FMLClientSetupEvent event) { - KnockdownsClient.init(); - } - - @SubscribeEvent - public static void onHudRender(RenderGuiEvent.Pre event) { - ru.octol1ttle.knockdowns.common.events.KnockdownsClientEvents.onHudRender(event.getGuiGraphics()); - } -} diff --git a/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsForge.java b/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsForge.java index 0c7454a..83a53a8 100644 --- a/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsForge.java +++ b/forge/src/main/java/ru/octol1ttle/knockdowns/forge/KnockdownsForge.java @@ -3,7 +3,9 @@ package ru.octol1ttle.knockdowns.forge; import dev.architectury.platform.forge.EventBuses; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import ru.octol1ttle.knockdowns.common.KnockdownsClient; import ru.octol1ttle.knockdowns.common.KnockdownsCommon; @SuppressWarnings("unused") @@ -13,7 +15,12 @@ public class KnockdownsForge { // Submit our event bus to let architectury register our content on the right time IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); EventBuses.registerModEventBus(KnockdownsCommon.MOD_ID, modEventBus); + modEventBus.addListener(this::onInitializeClient); KnockdownsCommon.init(); } + + public void onInitializeClient(FMLClientSetupEvent event) { + KnockdownsClient.init(); + } } diff --git a/gradle.properties b/gradle.properties index 0e63c4e..822bf00 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,11 +4,14 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=knockdowns -mod_version=2.3.1 +mod_version=2.2.2 maven_group=ru.octol1ttle.knockdowns architectury_version=9.1.12 fabric_api_version=0.90.4+1.20.1 fabric_loader_version=0.15.5 -forge_version=1.20.1-47.2.0 \ No newline at end of file +forge_version=1.20.1-47.2.0 + + + diff --git a/settings.gradle b/settings.gradle index 553b0f8..163e9f2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,7 +2,7 @@ pluginManagement { repositories { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } - maven { url "https://maven.neoforged.net/releases" } + maven { url "https://maven.minecraftforge.net/" } gradlePluginPortal() } }