Skip to content

Commit

Permalink
feat: 1.19.4 support
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgeV220 committed Mar 17, 2023
1 parent d3c1bc8 commit 3856a51
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 1 deletion.
1 change: 1 addition & 0 deletions bukkit/build.gradle
Expand Up @@ -6,6 +6,7 @@ dependencies {
compileOnly project(path: ':mc-1-18-2', configuration: 'reobf')
compileOnly project(path: ':mc-1-19', configuration: 'reobf')
compileOnly project(path: ':mc-1-19-3', configuration: 'reobf')
compileOnly project(path: ':mc-1-19-4', configuration: 'reobf')

implementation "net.kyori:adventure-platform-bukkit:4.2.0"
}
Expand Down
Expand Up @@ -75,6 +75,7 @@ public void onEnable() {
case V1_18_R2 -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_1_18_R2());
case V1_19_R1 -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_1_19());
case V1_19_R2 -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_1_19_R2());
case V1_19_R3 -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_1_19_R3());
case UNKNOWN -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_());
default -> SkinOverlay.getInstance().setSkinHandler(new SkinHandler_Legacy());
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Expand Up @@ -6,7 +6,7 @@ bungeeMain = com.georgev22.skinoverlay.SkinOverlayBungee
spongeMain = com.georgev22.skinoverlay.SkinOverlaySponge
pluginName = SkinOverlay
author = GeorgeV22
libraryVersion = 9.4.0
libraryVersion = 9.5.1
mcVersion = 1.18.2
apiVersion = 1.13
version = 3.11.0
16 changes: 16 additions & 0 deletions mc-1-19-4/build.gradle
@@ -0,0 +1,16 @@
plugins {
id "io.papermc.paperweight.userdev" version "1.5.3"
}

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.4-R0.1-SNAPSHOT")

implementation project(path: ':core')

compileOnly "io.papermc:paperlib:1.0.7"
}
@@ -0,0 +1,116 @@

package com.georgev22.skinoverlay.handler.handlers;

import com.georgev22.library.utilities.Utils;
import com.georgev22.skinoverlay.handler.SkinHandler;
import com.georgev22.skinoverlay.utilities.SkinOptions;
import com.georgev22.skinoverlay.utilities.player.PlayerObject;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import io.papermc.lib.PaperLib;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.*;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.level.ServerPlayerGameMode;
import net.minecraft.world.level.biome.BiomeManager;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.HashSet;
import java.util.List;

public class SkinHandler_1_19_R3 extends SkinHandler {
@Override
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull SkinOptions skinOptions, Property property, final Utils.@NotNull Callback<Boolean> callback) {
this.updateSkin(playerObject, skinOptions, callback);
}

@Override
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull SkinOptions skinOptions, final Utils.@NotNull Callback<Boolean> callback) {
try {
Player player = (Player) playerObject.player();
final CraftPlayer craftPlayer = (CraftPlayer) player;
final ServerPlayer entityPlayer = craftPlayer.getHandle();


ClientboundPlayerInfoRemovePacket removePlayer = new ClientboundPlayerInfoRemovePacket(List.of(entityPlayer.getUUID()));
ClientboundPlayerInfoUpdatePacket addPlayer = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityPlayer));
ServerLevel world = entityPlayer.getLevel();
ServerPlayerGameMode gamemode = entityPlayer.gameMode;

ClientboundRespawnPacket respawn = new ClientboundRespawnPacket(
world.dimensionTypeId(),
world.dimension(),
BiomeManager.obfuscateSeed(world.getSeed()),
gamemode.getGameModeForPlayer(),
gamemode.getPreviousGameModeForPlayer(),
world.isDebug(),
world.isFlat(),
(byte) 3,
entityPlayer.getLastDeathLocation()
);

Location l = player.getLocation();
ClientboundPlayerPositionPacket pos = new ClientboundPlayerPositionPacket(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch(), new HashSet<>(), 0);
ClientboundSetCarriedItemPacket slot = new ClientboundSetCarriedItemPacket(player.getInventory().getHeldItemSlot());

sendPacket(entityPlayer, removePlayer);
sendPacket(entityPlayer, addPlayer);

sendPacket(entityPlayer, respawn);

SynchedEntityData synchedEntityData = entityPlayer.getEntityData();

EntityDataAccessor<Byte> entityDataAccessor;

synchedEntityData.set(entityDataAccessor = new EntityDataAccessor<>(17, EntityDataSerializers.BYTE), skinOptions.getFlags());

synchedEntityData.markDirty(entityDataAccessor);

synchedEntityData.refresh(entityPlayer);

entityPlayer.onUpdateAbilities();

sendPacket(entityPlayer, pos);
sendPacket(entityPlayer, slot);
craftPlayer.updateScaledHealth();
player.updateInventory();
entityPlayer.resetSentInfo();
callback.onSuccess();
} catch (Exception exception) {
callback.onFailure(exception);
}
}

@Override
public GameProfile getGameProfile0(@NotNull PlayerObject playerObject) {
Player player = (Player) playerObject.player();
final CraftPlayer craftPlayer = (CraftPlayer) player;
final ServerPlayer entityPlayer = craftPlayer.getHandle();
if (PaperLib.isSpigot())
try {
Field field = entityPlayer.getClass().getDeclaredField("cs");
if (Modifier.isPrivate(field.getModifiers())) {
return (GameProfile) Utils.Reflection.fetchDeclaredField(entityPlayer.getClass().getSuperclass(), entityPlayer, "cs");
}
} catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException |
InvocationTargetException exception) {
exception.printStackTrace();
}
return entityPlayer.gameProfile;
}

private void sendPacket(@NotNull ServerPlayer player, Packet<?> packet) {
player.connection.send(packet);
}
}

1 change: 1 addition & 0 deletions settings.gradle
Expand Up @@ -24,4 +24,5 @@ include 'bungee'
include 'velocity'
include 'sponge'
include 'sponge7'
include 'mc-1-19-4'

0 comments on commit 3856a51

Please sign in to comment.