Skip to content

Commit e1a2179

Browse files
committed
not working
1 parent 66535c0 commit e1a2179

File tree

15 files changed

+511
-37
lines changed

15 files changed

+511
-37
lines changed

simpleclient-1.19.4/build.gradle

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,5 @@ processResources {
4242
}
4343

4444
tasks.withType(JavaCompile).configureEach {
45-
it.options.release = 17
46-
}
47-
48-
task copyJar(type: Copy) {
49-
group = 'build'
50-
from remapJar
51-
if (!rootProject.file('build/libs').exists()) rootProject.file('build/libs').mkdirs()
52-
into rootProject.file('build/libs')
53-
}
54-
remapJar.finalizedBy copyJar
45+
it.options.release.set 17
46+
}

simpleclient-1.20.1/build.gradle

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,5 @@ processResources {
4242
}
4343

4444
tasks.withType(JavaCompile).configureEach {
45-
it.options.release = 17
46-
}
47-
48-
task copyJar(type: Copy) {
49-
group = 'build'
50-
from remapJar
51-
if (!rootProject.file('build/libs').exists()) rootProject.file('build/libs').mkdirs()
52-
into rootProject.file('build/libs')
53-
}
54-
remapJar.finalizedBy copyJar
45+
it.options.release.set 17
46+
}

simpleclient-1.20.1/src/main/java/simpleclient/SimpleClient.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22

33
import net.fabricmc.api.ClientModInitializer;
44
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
5+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
6+
import net.fabricmc.fabric.api.networking.v1.PacketSender;
57
import net.fabricmc.loader.api.FabricLoader;
68
import net.minecraft.client.Minecraft;
9+
import net.minecraft.client.multiplayer.ClientPacketListener;
10+
import net.minecraft.network.FriendlyByteBuf;
11+
import net.minecraft.resources.ResourceLocation;
712
import org.slf4j.Logger;
813
import org.slf4j.LoggerFactory;
914
import simpleclient.adapter.TranslationAdapter;
1015
import simpleclient.adapter.TranslationAdapterImpl;
1116
import simpleclient.feature.FeatureManager;
17+
import simpleclient.feature.LegacyPvP;
1218
import simpleclient.util.DiscordRPC;
1319

1420
import java.net.InetSocketAddress;
@@ -40,6 +46,7 @@ public void onInitializeClient() {
4046
}
4147
});
4248
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> DiscordRPC.INSTANCE.close());
49+
LegacyPvP.init();
4350
}
4451

4552
public String loadVersion() {
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package simpleclient.feature;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import io.netty.buffer.Unpooled;
5+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
6+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
7+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
8+
import net.fabricmc.fabric.api.networking.v1.PacketType;
9+
import net.minecraft.client.Minecraft;
10+
import net.minecraft.network.FriendlyByteBuf;
11+
import net.minecraft.resources.ResourceLocation;
12+
import net.minecraft.world.entity.player.Player;
13+
import simpleclient.SimpleClient;
14+
15+
import java.util.*;
16+
17+
public class LegacyPvP {
18+
public static boolean ENABLED = false;
19+
public static boolean BLOCKING = false;
20+
private static final Set<UUID> blockingPlayers = new HashSet<>();
21+
22+
public static void init() {
23+
ClientEntityEvents.ENTITY_LOAD.register((entity, world) -> {
24+
if (entity == Minecraft.getInstance().player) {
25+
BLOCKING = false;
26+
blockingPlayers.clear();
27+
}
28+
});
29+
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> {
30+
ByteBuf buf = Unpooled.buffer();
31+
buf.writeBytes(SimpleClient.VERSION.getBytes());
32+
ClientPlayNetworking.send(new ResourceLocation("simpleclient", "handshake"), new FriendlyByteBuf(buf));
33+
});
34+
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> LegacyPvP.ENABLED = false);
35+
ClientPlayNetworking.registerGlobalReceiver(new ResourceLocation("simpleclient:legacypvp"), (client, handler, buf, sender) -> {
36+
byte method = buf.readByte();
37+
if (method == 0) LegacyPvP.ENABLED = true;
38+
if (method == 1) LegacyPvP.ENABLED = false;
39+
if (method == 2) blockingPlayers.add(buf.readUUID());
40+
if (method == 3) blockingPlayers.remove(buf.readUUID());
41+
});
42+
}
43+
44+
public static boolean isBlocking(UUID uuid) {
45+
return (uuid.equals(Minecraft.getInstance().player.getUUID()) && BLOCKING) || blockingPlayers.contains(uuid);
46+
}
47+
48+
public static boolean isBlocking(Player player) {
49+
return isBlocking(player.getUUID());
50+
}
51+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package simpleclient.mixin.feature.legacypvp;
2+
3+
import net.minecraft.client.AttackIndicatorStatus;
4+
import net.minecraft.client.Minecraft;
5+
import net.minecraft.client.gui.Gui;
6+
import net.minecraft.client.gui.GuiGraphics;
7+
import net.minecraft.world.InteractionHand;
8+
import net.minecraft.world.entity.player.Player;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.Unique;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Inject;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
16+
import simpleclient.feature.LegacyPvP;
17+
18+
@Mixin(Gui.class)
19+
abstract class GuiMixin {
20+
@Shadow @Final private Minecraft minecraft;
21+
@Unique
22+
private AttackIndicatorStatus attackIndicator;
23+
24+
@Inject(at = @At(value = "HEAD"), method = "render")
25+
public void render1(GuiGraphics guiGraphics, float patrialTicks, CallbackInfo ci) {
26+
if (LegacyPvP.ENABLED) {
27+
attackIndicator = minecraft.options.attackIndicator().get();
28+
minecraft.options.attackIndicator().set(AttackIndicatorStatus.OFF);
29+
}
30+
}
31+
32+
@Inject(at = @At(value = "TAIL"), method = "render")
33+
public void render2(GuiGraphics guiGraphics, float partialTicks, CallbackInfo ci) {
34+
if (LegacyPvP.ENABLED) minecraft.options.attackIndicator().set(attackIndicator);
35+
}
36+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package simpleclient.mixin.feature.legacypvp;
2+
3+
import net.minecraft.client.model.HumanoidModel;
4+
import net.minecraft.client.model.geom.ModelPart;
5+
import net.minecraft.world.InteractionHand;
6+
import net.minecraft.world.entity.LivingEntity;
7+
import net.minecraft.world.entity.player.Player;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
import simpleclient.feature.LegacyPvP;
15+
16+
@Mixin(HumanoidModel.class)
17+
abstract class HumanoidModelMixin<T extends LivingEntity> {
18+
@Shadow @Final public ModelPart leftArm;
19+
@Shadow @Final public ModelPart rightArm;
20+
21+
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/HumanoidModel;setupAttackAnimation(Lnet/minecraft/world/entity/LivingEntity;F)V"), method = "setupAnim")
22+
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, CallbackInfo ci) {
23+
if (LegacyPvP.ENABLED && entity instanceof Player player && LegacyPvP.isBlocking(player)) {
24+
if (player.getUsedItemHand() == InteractionHand.OFF_HAND) {
25+
leftArm.xRot = leftArm.xRot - ((float) Math.PI * 2.0F) / 10.0F;
26+
} else rightArm.xRot = rightArm.xRot - ((float) Math.PI * 2.0F) / 10.0F;
27+
}
28+
}
29+
}
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
package simpleclient.mixin.feature.legacypvp;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import com.mojang.math.Axis;
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraft.client.gui.Gui;
7+
import net.minecraft.client.gui.GuiGraphics;
8+
import net.minecraft.client.player.AbstractClientPlayer;
9+
import net.minecraft.client.player.LocalPlayer;
10+
import net.minecraft.client.renderer.ItemInHandRenderer;
11+
import net.minecraft.client.renderer.MultiBufferSource;
12+
import net.minecraft.client.renderer.block.model.ItemTransforms;
13+
import net.minecraft.util.Mth;
14+
import net.minecraft.world.InteractionHand;
15+
import net.minecraft.world.entity.HumanoidArm;
16+
import net.minecraft.world.item.CrossbowItem;
17+
import net.minecraft.world.item.ItemDisplayContext;
18+
import net.minecraft.world.item.ItemStack;
19+
import net.minecraft.world.item.Items;
20+
import org.spongepowered.asm.mixin.Final;
21+
import org.spongepowered.asm.mixin.Mixin;
22+
import org.spongepowered.asm.mixin.Shadow;
23+
import org.spongepowered.asm.mixin.Unique;
24+
import org.spongepowered.asm.mixin.injection.At;
25+
import org.spongepowered.asm.mixin.injection.Inject;
26+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
27+
import simpleclient.feature.LegacyPvP;
28+
29+
@Mixin(ItemInHandRenderer.class)
30+
public abstract class ItemInHandRendererMixin {
31+
@Shadow @Final private Minecraft minecraft;
32+
33+
@Shadow protected abstract void applyItemArmTransform(PoseStack poseStack, HumanoidArm humanoidArm, float f);
34+
35+
@Shadow protected abstract void applyItemArmAttackTransform(PoseStack poseStack, HumanoidArm humanoidArm, float f);
36+
37+
@Shadow protected abstract void applyEatTransform(PoseStack poseStack, float f, HumanoidArm humanoidArm, ItemStack itemStack);
38+
39+
/*@Inject(at = @At("HEAD"), method = "itemUsed", cancellable = true)
40+
public void itemUsed(InteractionHand interactionHand, CallbackInfo ci) {
41+
if (LegacyPvP.ENABLED) ci.cancel();
42+
}*/
43+
44+
@Inject(at = @At(value = "HEAD"), method = "renderArmWithItem", cancellable = true)
45+
public void renderArmWithItem(AbstractClientPlayer player, float partialTicks, float pitch, InteractionHand hand, float equipProgress, ItemStack itemStack, float swingProgress, PoseStack poseStack, MultiBufferSource multiBufferSource, int packedLight, CallbackInfo ci) {
46+
if (LegacyPvP.ENABLED && LegacyPvP.BLOCKING && player.getUsedItemHand() == hand) {
47+
ItemInHandRenderer itemRenderer = minecraft.gameRenderer.itemInHandRenderer;
48+
poseStack.pushPose();
49+
boolean mainHand = hand == InteractionHand.MAIN_HAND;
50+
HumanoidArm arm = mainHand ? player.getMainArm() : player.getMainArm().getOpposite();
51+
boolean rightArm = arm == HumanoidArm.RIGHT;
52+
applyItemArmTransform(poseStack, arm, equipProgress);
53+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
54+
transformBlockFirstPerson(poseStack, arm);
55+
itemRenderer.renderItem(
56+
player,
57+
itemStack,
58+
rightArm ? ItemDisplayContext.FIRST_PERSON_RIGHT_HAND : ItemDisplayContext.FIRST_PERSON_LEFT_HAND,
59+
!rightArm,
60+
poseStack,
61+
multiBufferSource,
62+
packedLight
63+
);
64+
poseStack.popPose();
65+
ci.cancel();
66+
}
67+
}
68+
69+
@Unique
70+
private void transformBlockFirstPerson(PoseStack poseStack, HumanoidArm hand) {
71+
int signum = hand == HumanoidArm.RIGHT ? 1 : -1;
72+
poseStack.translate(signum * -0.14142136F, 0.08F, 0.14142136F);
73+
poseStack.mulPose(Axis.XP.rotationDegrees(-102.25F));
74+
poseStack.mulPose(Axis.YP.rotationDegrees(signum * 13.365F));
75+
poseStack.mulPose(Axis.ZP.rotationDegrees(signum * 78.05F));
76+
}
77+
78+
@Inject(at = @At(value = "HEAD"), method = "renderArmWithItem", cancellable = true)
79+
public void renderArmWithItem2(AbstractClientPlayer player, float partialTicks, float pitch, InteractionHand hand, float equipProgress, ItemStack itemStack, float swingProgress, PoseStack poseStack, MultiBufferSource multiBufferSource, int packedLight, CallbackInfo ci) {
80+
if (LegacyPvP.ENABLED && LegacyPvP.BLOCKING && player.getUseItemRemainingTicks() > 0 && player.getUsedItemHand() == hand) {
81+
if (itemStack.isEmpty() || itemStack.is(Items.FILLED_MAP)) return;
82+
ci.cancel();
83+
boolean mainHand = hand == InteractionHand.MAIN_HAND;
84+
HumanoidArm arm = mainHand ? player.getMainArm() : player.getMainArm().getOpposite();
85+
boolean rightArm = arm == HumanoidArm.RIGHT;
86+
poseStack.pushPose();
87+
switch (itemStack.getUseAnimation()) {
88+
case NONE, BLOCK -> {
89+
applyItemArmTransform(poseStack, arm, equipProgress);
90+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
91+
}
92+
case EAT, DRINK -> {
93+
applyEatTransform(poseStack, partialTicks, arm, itemStack);
94+
applyItemArmTransform(poseStack, arm, equipProgress);
95+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
96+
}
97+
case BOW -> {
98+
applyItemArmTransform(poseStack, arm, equipProgress);
99+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
100+
applyBowTransform(poseStack, partialTicks, arm, itemStack, minecraft);
101+
}
102+
case SPEAR -> {
103+
applyItemArmTransform(poseStack, arm, equipProgress);
104+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
105+
applyTridentTransform(poseStack, partialTicks, arm, itemStack, minecraft);
106+
}
107+
case CROSSBOW -> {
108+
applyItemArmTransform(poseStack, arm, equipProgress);
109+
applyItemArmAttackTransform(poseStack, arm, swingProgress);
110+
applyCrossbowTransform(poseStack, partialTicks, arm, itemStack, minecraft);
111+
}
112+
}
113+
minecraft.gameRenderer.itemInHandRenderer.renderItem(
114+
player,
115+
itemStack,
116+
rightArm ? ItemDisplayContext.FIRST_PERSON_RIGHT_HAND : ItemDisplayContext.FIRST_PERSON_LEFT_HAND,
117+
!rightArm,
118+
poseStack,
119+
multiBufferSource,
120+
packedLight
121+
);
122+
poseStack.popPose();
123+
}
124+
}
125+
126+
@Unique
127+
private void applyBowTransform(PoseStack poseStack, float partialTicks, HumanoidArm arm, ItemStack itemStack, Minecraft minecraft) {
128+
int signum = arm == HumanoidArm.RIGHT ? 1 : -1;
129+
poseStack.translate(signum * -0.2785682F, 0.18344387F, 0.15731531F);
130+
poseStack.mulPose(Axis.XP.rotationDegrees(-13.935F));
131+
poseStack.mulPose(Axis.YP.rotationDegrees(signum * 35.3F));
132+
poseStack.mulPose(Axis.ZP.rotationDegrees(signum * -9.785F));
133+
float f8 = itemStack.getUseDuration() - (minecraft.player != null ? minecraft.player.getUseItemRemainingTicks() : 0.0F) - partialTicks + 1.0F;
134+
float f12 = f8 / 20.0F;
135+
f12 = (f12 * f12 + f12 * 2.0F) / 3.0F;
136+
if (f12 > 1.0F) f12 = 1.0F;
137+
if (f12 > 0.1F) {
138+
float f15 = Mth.sin((f8 - 0.1F) * 1.3F);
139+
float f18 = f12 - 0.1F;
140+
float f20 = f15 * f18;
141+
poseStack.translate(f20 * 0.0F, f20 * 0.004F, f20 * 0.0F);
142+
}
143+
poseStack.translate(f12 * 0.0F, f12 * 0.0F, f12 * 0.04F);
144+
poseStack.scale(1.0F, 1.0F, 1.0F + f12 * 0.2F);
145+
poseStack.mulPose(Axis.YN.rotationDegrees(signum * 45.0F));
146+
}
147+
148+
@Unique
149+
private void applyTridentTransform(PoseStack poseStack, float partialTicks, HumanoidArm arm, ItemStack itemStack, Minecraft minecraft) {
150+
int signum = arm == HumanoidArm.RIGHT ? 1 : -1;
151+
poseStack.translate(signum * -0.5F, 0.7F, 0.1F);
152+
poseStack.mulPose(Axis.XP.rotationDegrees(-55.0F));
153+
poseStack.mulPose(Axis.YP.rotationDegrees(signum * 35.3F));
154+
poseStack.mulPose(Axis.ZP.rotationDegrees(signum * -9.785F));
155+
float f7 = itemStack.getUseDuration() - (minecraft.player != null ? minecraft.player.getUseItemRemainingTicks() : 0.0F) - partialTicks + 1.0F;
156+
float f11 = f7 / 10.0F;
157+
if (f11 > 1.0F) f11 = 1.0F;
158+
if (f11 > 0.1F) {
159+
float f14 = Mth.sin((f7 - 0.1F) * 1.3F);
160+
float f17 = f11 - 0.1F;
161+
float f19 = f14 * f17;
162+
poseStack.translate(f19 * 0.0F, f19 * 0.004F, f19 * 0.0F);
163+
}
164+
poseStack.translate(0.0D, 0.0D, f11 * 0.2F);
165+
poseStack.scale(1.0F, 1.0F, 1.0F + f11 * 0.2F);
166+
poseStack.mulPose(Axis.YN.rotationDegrees(signum * 45.0F));
167+
}
168+
169+
@Unique
170+
private void applyCrossbowTransform(PoseStack poseStack, float partialTicks, HumanoidArm arm, ItemStack itemStack, Minecraft minecraft) {
171+
int signum = arm == HumanoidArm.RIGHT ? 1 : -1;
172+
poseStack.translate(signum * -0.4785682F, -0.094387F, 0.05731531F);
173+
poseStack.mulPose(Axis.XP.rotationDegrees(-11.935F));
174+
poseStack.mulPose(Axis.YP.rotationDegrees(signum * 65.3F));
175+
poseStack.mulPose(Axis.ZP.rotationDegrees(signum * -9.785F));
176+
float f9 = itemStack.getUseDuration() - minecraft.player.getUseItemRemainingTicks() - partialTicks + 1.0F;
177+
float f13 = f9 / CrossbowItem.getChargeDuration(itemStack);
178+
if (f13 > 1.0F) f13 = 1.0F;
179+
if (f13 > 0.1F) {
180+
float f16 = Mth.sin((f9 - 0.1F) * 1.3F);
181+
float f3 = f13 - 0.1F;
182+
float f4 = f16 * f3;
183+
poseStack.translate(f4 * 0.0F, f4 * 0.004F, f4 * 0.0F);
184+
}
185+
poseStack.translate(f13 * 0.0F, f13 * 0.0F, f13 * 0.04F);
186+
poseStack.scale(1.0F, 1.0F, 1.0F + f13 * 0.2F);
187+
poseStack.mulPose(Axis.YN.rotationDegrees(signum * 45.0F));
188+
}
189+
}

0 commit comments

Comments
 (0)