diff --git a/gradle.properties b/gradle.properties index 03db03ea..a10391f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check https://fabricmc.net/develop/ - minecraft_version=25w33a + minecraft_version=25w34b loader_version=0.16.14 jsr305_version=3.0.2 fabric_version=0.119.5+1.21.5 diff --git a/src/main/java/carpet/commands/PlayerCommand.java b/src/main/java/carpet/commands/PlayerCommand.java index 237a9ca5..4ad63884 100644 --- a/src/main/java/carpet/commands/PlayerCommand.java +++ b/src/main/java/carpet/commands/PlayerCommand.java @@ -30,16 +30,15 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.NameAndId; +import net.minecraft.server.players.OldUsersConverter; import net.minecraft.server.players.PlayerList; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; + +import java.util.*; import java.util.function.Consumer; import static net.minecraft.commands.Commands.argument; @@ -201,7 +200,20 @@ public class PlayerCommand Messenger.m(context.getSource(), "r Player ", "rb " + playerName, "r is already logged on"); return true; } - NameAndId profile = server.nameToIdCache().get(playerName).orElse(null); + UUID uuid = OldUsersConverter.convertMobOwnerIfNecessary(server, playerName); + if (uuid == null) + { + if (!CarpetSettings.allowSpawningOfflinePlayers) + { + Messenger.m(context.getSource(), "r Player "+playerName+" is either banned by Mojang, or auth servers are down. " + + "Banned players can only be summoned in Singleplayer and in servers in off-line mode."); + return true; + } else { + uuid = UUIDUtil.createOfflinePlayerUUID(playerName); + } + } + //GameProfile profile = new GameProfile(uuid, playerName); + NameAndId profile = server.services().nameToIdCache().get(uuid).orElse(null); if (profile == null) { if (!CarpetSettings.allowSpawningOfflinePlayers) diff --git a/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java b/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java index ec90780b..4627ad6c 100644 --- a/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java +++ b/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java @@ -4,10 +4,12 @@ import carpet.CarpetSettings; import carpet.fakes.PistonBlockEntityInterface; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.PistonHeadRenderer; +import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; import net.minecraft.world.phys.Vec3; @@ -27,10 +29,10 @@ public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRe dispatcher = arguments.blockEntityRenderDispatcher(); } - @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/blockentity/PistonHeadRenderer;renderBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/level/Level;ZI)V", + @Inject(method = "submit(Lnet/minecraft/world/level/block/piston/PistonMovingBlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;IILnet/minecraft/world/phys/Vec3;Lnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;Lnet/minecraft/client/renderer/SubmitNodeCollector;)V", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/renderer/blockentity/PistonHeadRenderer;submitMovingBlock(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Holder;Lnet/minecraft/world/level/Level;)V", ordinal = 3)) - private void updateRenderBool(PistonMovingBlockEntity pistonBlockEntity_1, float float_1, PoseStack matrixStack_1, MultiBufferSource layeredVertexConsumerStorage_1, int int_1, int int_2, Vec3 cameraPos, CallbackInfo ci) + private void updateRenderBool(PistonMovingBlockEntity pistonBlockEntity_1, float f, PoseStack poseStack, int i, int j, Vec3 vec3, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay, SubmitNodeCollector submitNodeCollector, CallbackInfo ci) //private void updateRenderBool(PistonBlockEntity pistonBlockEntity_1, double double_1, double double_2, double double_3, float float_1, class_4587 class_4587_1, class_4597 class_4597_1, int int_1, CallbackInfo ci) { if (!((PistonBlockEntityInterface) pistonBlockEntity_1).isRenderModeSet()) @@ -38,8 +40,9 @@ public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRe } - @Inject(method = "render", at = @At("RETURN"), locals = LocalCapture.NO_CAPTURE) - private void endMethod3576(PistonMovingBlockEntity pistonBlockEntity_1, float partialTicks, PoseStack matrixStack_1, MultiBufferSource layeredVertexConsumerStorage_1, int int_1, int init_2, Vec3 cameraPos, CallbackInfo ci) + @Inject(method = "submit(Lnet/minecraft/world/level/block/piston/PistonMovingBlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;IILnet/minecraft/world/phys/Vec3;Lnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;Lnet/minecraft/client/renderer/SubmitNodeCollector;)V", at = @At("RETURN"), locals = LocalCapture.NO_CAPTURE) + private void endMethod(PistonMovingBlockEntity pistonBlockEntity_1, float partialTicks, PoseStack matrixStack_1, int i, int j, Vec3 vec3, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay, SubmitNodeCollector submitNodeCollector, CallbackInfo ci) + //private void endMethod3576(PistonMovingBlockEntity pistonBlockEntity_1, float partialTicks, PoseStack matrixStack_1, MultiBufferSource layeredVertexConsumerStorage_1, int int_1, int init_2, Vec3 cameraPos, CallbackInfo ci) { if (((PistonBlockEntityInterface) pistonBlockEntity_1).getRenderCarriedBlockEntity()) { @@ -53,7 +56,7 @@ public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRe pistonBlockEntity_1.getYOff(partialTicks), pistonBlockEntity_1.getZOff(partialTicks) ); - dispatcher.render(carriedBlockEntity, partialTicks, matrixStack_1, layeredVertexConsumerStorage_1); + dispatcher.submit(carriedBlockEntity, partialTicks, matrixStack_1, crumblingOverlay, submitNodeCollector); } } diff --git a/src/main/java/carpet/patches/EntityPlayerMPFake.java b/src/main/java/carpet/patches/EntityPlayerMPFake.java index 06173201..6486a003 100644 --- a/src/main/java/carpet/patches/EntityPlayerMPFake.java +++ b/src/main/java/carpet/patches/EntityPlayerMPFake.java @@ -23,6 +23,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.CommonListenerCookie; import net.minecraft.server.players.CachedUserNameToIdResolver; import net.minecraft.server.players.NameAndId; +import net.minecraft.server.players.OldUsersConverter; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; @@ -43,6 +44,7 @@ import carpet.utils.Messenger; import java.util.HashSet; import java.util.Optional; import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; @SuppressWarnings("EntityConstructor") @@ -58,24 +60,21 @@ public class EntityPlayerMPFake extends ServerPlayer { //prolly half of that crap is not necessary, but it works ServerLevel worldIn = server.getLevel(dimensionId); - server.nameToIdCache().resolveOfflineUsers(false); + server.services().nameToIdCache().resolveOfflineUsers(false); GameProfile gameprofile; - try { - NameAndId res = server.nameToIdCache().get(username).orElseThrow(); //findByName .orElse(null) - gameprofile = new GameProfile(res.id(), res.name()); - } - finally { - server.nameToIdCache().resolveOfflineUsers(server.isDedicatedServer() && server.usesAuthentication()); - } - if (gameprofile == null) - { - if (!CarpetSettings.allowSpawningOfflinePlayers) - { - return false; - } else { - gameprofile = new GameProfile(UUIDUtil.createOfflinePlayerUUID(username), username); + + UUID uuid = OldUsersConverter.convertMobOwnerIfNecessary(server, username); + //NameAndId res = server.services().nameToIdCache().get(username).orElseThrow(); //findByName .orElse(null) + if (uuid == null && CarpetSettings.allowSpawningOfflinePlayers) { + server.services().nameToIdCache().resolveOfflineUsers(server.isDedicatedServer() && server.usesAuthentication()); + uuid = UUIDUtil.createOfflinePlayerUUID(username); } - } + if (uuid == null) { + return false; // no uuid, no player + } + gameprofile = new GameProfile(uuid, username); + + //GameProfile finalGP = gameprofile; // We need to mark this player as spawning so that we do not @@ -84,7 +83,7 @@ public class EntityPlayerMPFake extends ServerPlayer String name = gameprofile.getName(); spawning.add(name); - fetchGameProfile(name).whenCompleteAsync((p, t) -> { + fetchGameProfile(server, gameprofile.getId()).whenCompleteAsync((p, t) -> { // Always remove the name, even if exception occurs spawning.remove(name); if (t != null) @@ -92,7 +91,13 @@ public class EntityPlayerMPFake extends ServerPlayer return; } - GameProfile current = p.gameProfile(); + GameProfile current; + if (p.getName().isEmpty()) { + current = gameprofile; + } + else { + current = p; + } EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, current, ClientInformation.createDefault(), false); instance.fixStartingPosition = () -> instance.snapTo(pos.x, pos.y, pos.z, (float) yaw, (float) pitch); @@ -111,9 +116,9 @@ public class EntityPlayerMPFake extends ServerPlayer return true; } - private static CompletableFuture fetchGameProfile(final String name) { - final ResolvableProfile resolvableProfile = new ResolvableProfile(Optional.of(name), Optional.empty(), new PropertyMap()); - return resolvableProfile.resolve(); + private static CompletableFuture fetchGameProfile(MinecraftServer server, final UUID name) { + final ResolvableProfile resolvableProfile = ResolvableProfile.createUnresolved(name); + return resolvableProfile.resolveProfile(server.services().profileResolver()); } public static EntityPlayerMPFake createShadow(MinecraftServer server, ServerPlayer player) diff --git a/src/main/java/carpet/script/utils/ShapesRenderer.java b/src/main/java/carpet/script/utils/ShapesRenderer.java index d7c1d515..6e5ad40b 100644 --- a/src/main/java/carpet/script/utils/ShapesRenderer.java +++ b/src/main/java/carpet/script/utils/ShapesRenderer.java @@ -4,6 +4,7 @@ import carpet.script.CarpetScriptServer; import carpet.script.external.Carpet; import carpet.script.utils.shapes.ShapeDirection; +import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.ByteBufferBuilder; @@ -32,6 +33,8 @@ import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.entity.state.EntityRenderState; +import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -438,8 +441,8 @@ public class ShapesRenderer BlockEntityRenderer blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity); if (blockEntityRenderer != null) { - blockEntityRenderer.render(BlockEntity, partialTick, - matrices, immediate, light, OverlayTexture.NO_OVERLAY, camera1.getPosition()); + blockEntityRenderer.submit(BlockEntity, partialTick, + matrices, light, OverlayTexture.NO_OVERLAY, camera1.getPosition(), null, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage()); } } @@ -449,8 +452,13 @@ public class ShapesRenderer if (shape.item != null) { // draw the item - client.getItemRenderer().renderStatic(shape.item, transformType, light, - OverlayTexture.NO_OVERLAY, matrices, immediate, client.level, (int) shape.key(client.level.registryAccess())); + + final ItemStackRenderState itemState = new ItemStackRenderState(); + client.getItemModelResolver().updateForTopItem(itemState, shape.item, ItemDisplayContext.FIXED, client.level, null, 0); + itemState.submit(matrices, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage(), light, OverlayTexture.NO_OVERLAY, EntityRenderState.NO_OUTLINE); + + //client.getItemRenderer().renderStatic(shape.item, transformType, light, + // OverlayTexture.NO_OVERLAY, matrices, immediate, client.level, (int) shape.key(client.level.registryAccess())); } } matrices.popPose();