Skip to content

Commit

Permalink
Update to 23w31a
Browse files Browse the repository at this point in the history
  • Loading branch information
DrexHD committed Aug 7, 2023
1 parent 07a3847 commit dbf1739
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 59 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ dependencies {
"fabric-resource-loader-v0" // server-translations-api
]
apiModules.forEach {
include(modImplementation(fabricApi.module(it, project.fabric_version)))
modImplementation(fabricApi.module(it, project.fabric_version))
}
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

Expand Down
7 changes: 4 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.20
loader_version=0.14.21
minecraft_version=23w31a
loader_version=0.14.22
# Mod Properties
mod_version=1.4.2
maven_group=me.drex
archives_base_name=vanish
# Dependencies
fabric_version=0.83.0+1.20
fabric_version=0.86.1+1.20.2
mixin_extras_version=0.2.0-beta.8
permission_api_version=0.2-SNAPSHOT
placeholder_api_version=2.1.1+1.20
player_data_api_version=0.2.2+1.19.3
translations_version=2.0.0-beta.2+1.19.4-pre2
configurate_hocon_version=4.1.2
# Compat
expanded_storage_version=10.0.0-beta.1+fabric
bluemap_api_version=v2.5.1
styled_chat_version=2.2.0+1.20
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package me.drex.vanish.mixin;

import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import me.drex.vanish.api.VanishAPI;
import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket;
import net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerCommonPacketListenerImpl;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.entity.Entity;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ServerCommonPacketListenerImpl.class)
public abstract class ServerCommonPacketListenerImplMixin {

@Shadow @Final protected MinecraftServer server;

@Shadow public abstract void send(Packet<?> packet);

@Inject(
method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;Z)V",
at = @At("HEAD"),
cancellable = true
)
public void vanish_modifyPackets(Packet<?> packet, @Nullable PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) {
if ((Object) this instanceof ServerGamePacketListenerImpl listener) {
if (packet instanceof ClientboundTakeItemEntityPacket takeItemEntityPacket) {
Entity entity = listener.player.level().getEntity(takeItemEntityPacket.getPlayerId());
if (entity instanceof ServerPlayer actor && !VanishAPI.canSeePlayer(actor, listener.player)) {
this.send(new ClientboundRemoveEntitiesPacket(takeItemEntityPacket.getItemId()));
ci.cancel();
}
} else if (packet instanceof ClientboundPlayerInfoUpdatePacket playerInfoPacket) {
ObjectArrayList<ServerPlayer> modifiedEntries = new ObjectArrayList<>();
int visible = 0;
for (ClientboundPlayerInfoUpdatePacket.Entry playerUpdate : playerInfoPacket.entries()) {
if (VanishAPI.canSeePlayer(server, playerUpdate.profileId(), listener.player)) {
visible++;
ServerPlayer player = server.getPlayerList().getPlayer(playerUpdate.profileId());
if (player != null) modifiedEntries.add(player);
}
}
if (visible != playerInfoPacket.entries().size()) {
if (!modifiedEntries.isEmpty()) {
this.send(new ClientboundPlayerInfoUpdatePacket(playerInfoPacket.actions(), modifiedEntries));
}
ci.cancel();
}
}
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,73 +2,23 @@

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import me.drex.vanish.api.VanishAPI;
import net.minecraft.network.PacketSendListener;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket;
import net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.server.players.PlayerList;
import net.minecraft.world.entity.Entity;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ServerGamePacketListenerImpl.class)
public abstract class ServerGamePacketListenerImplMixin {

@Shadow
public ServerPlayer player;

@Shadow
public abstract void send(Packet<?> packet);

@Shadow
@Final
private MinecraftServer server;

@Inject(
method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;)V",
at = @At("HEAD"),
cancellable = true
)
public void vanish_modifyPackets(Packet<?> packet, @Nullable PacketSendListener packetSendListener, CallbackInfo ci) {
if (packet instanceof ClientboundTakeItemEntityPacket takeItemEntityPacket) {
Entity entity = this.player.level().getEntity(takeItemEntityPacket.getPlayerId());
if (entity instanceof ServerPlayer actor && !VanishAPI.canSeePlayer(actor, this.player)) {
this.send(new ClientboundRemoveEntitiesPacket(takeItemEntityPacket.getItemId()));
ci.cancel();
}
} else if (packet instanceof ClientboundPlayerInfoUpdatePacket playerInfoPacket) {
ObjectArrayList<ServerPlayer> modifiedEntries = new ObjectArrayList<>();
int visible = 0;
for (ClientboundPlayerInfoUpdatePacket.Entry playerUpdate : playerInfoPacket.entries()) {
if (VanishAPI.canSeePlayer(server, playerUpdate.profileId(), this.player)) {
visible++;
ServerPlayer player = server.getPlayerList().getPlayer(playerUpdate.profileId());
if (player != null) modifiedEntries.add(player);
}
}
if (visible != playerInfoPacket.entries().size()) {
if (!modifiedEntries.isEmpty()) {
this.send(new ClientboundPlayerInfoUpdatePacket(playerInfoPacket.actions(), modifiedEntries));
}
ci.cancel();
}
}
}

@WrapOperation(
method = "onDisconnect",
method = "removePlayerFromWorld",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/players/PlayerList;broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Z)V"
Expand Down
5 changes: 1 addition & 4 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,7 @@
],
"depends": {
"fabricloader": ">=0.14.8",
"fabric-command-api-v2": "*",
"fabric-lifecycle-events-v1": "*",
"fabric-message-api-v1": "*",
"minecraft": ">=1.20",
"fabric-api": "*",
"java": ">=17"
},
"breaks": {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/vanish.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"MinecraftServerMixin",
"PlayerAdvancementsMixin",
"PlayerListMixin",
"ServerCommonPacketListenerImplMixin",
"ServerGamePacketListenerImplMixin",
"ServerLevelMixin",
"ServerPlayerMixin",
Expand Down

0 comments on commit dbf1739

Please sign in to comment.