From f371e2e8bd867399ab6d47505255b5a174057fce Mon Sep 17 00:00:00 2001 From: gnembon Date: Thu, 4 Sep 2025 02:08:10 +0200 Subject: [PATCH] 25w36b --- gradle.properties | 2 +- src/main/java/carpet/CarpetServer.java | 2 +- src/main/java/carpet/CarpetSettings.java | 2 +- .../java/carpet/commands/PlayerCommand.java | 4 +- .../fakes/PistonHeadRenderStateInterface.java | 8 ++ .../mixins/LevelChunk_movableBEMixin.java | 9 +-- .../LevelRenderer_scarpetRenderMixin.java | 9 ++- .../mixins/LivingEntity_cleanLogsMixin.java | 2 +- .../PistonHeadRenderState_movableBEMixin.java | 20 +++++ .../PistonHeadRenderer_movableBEMixin.java | 69 ++++++++-------- .../mixins/Player_antiCheatDisabledMixin.java | 2 +- .../carpet/mixins/Player_parrotMixin.java | 73 +++-------------- ...PacketListenerImpl_scarpetEventsMixin.java | 4 +- .../mixins/ServerPlayer_parrotMixin.java | 80 +++++++++++++++++++ .../mixins/StructureBlockRenderer_mixin.java | 3 +- .../carpet/network/ServerNetworkHandler.java | 14 ++-- .../carpet/patches/EntityPlayerMPFake.java | 6 +- .../patches/TickSyncedBorderExtent.java | 7 +- .../java/carpet/script/CarpetEventServer.java | 8 +- .../java/carpet/script/EntityEventsGroup.java | 6 +- .../java/carpet/script/annotation/Param.java | 2 +- .../carpet/script/utils/ShapeDispatcher.java | 2 +- .../carpet/script/utils/ShapesRenderer.java | 15 +++- .../script/utils/SnoopyCommandSource.java | 6 +- .../java/carpet/script/value/EntityValue.java | 12 +-- .../java/carpet/script/value/ScreenValue.java | 2 +- .../carpet/script/value/ValueConversions.java | 2 +- src/main/java/carpet/utils/WoolTool.java | 2 +- src/main/resources/carpet.mixins.json | 2 + 29 files changed, 222 insertions(+), 153 deletions(-) create mode 100644 src/main/java/carpet/fakes/PistonHeadRenderStateInterface.java create mode 100644 src/main/java/carpet/mixins/PistonHeadRenderState_movableBEMixin.java create mode 100644 src/main/java/carpet/mixins/ServerPlayer_parrotMixin.java diff --git a/gradle.properties b/gradle.properties index ab57b460..4a2e6a78 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check https://fabricmc.net/develop/ - minecraft_version=25w35a + minecraft_version=25w36b 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/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 65ffb8ad..ed85b9c8 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -162,7 +162,7 @@ public class CarpetServer // static for now - easier to handle all around the co LoggerRegistry.playerDisconnected(player); extensions.forEach(e -> e.onPlayerLoggedOut(player)); // first case client, second case server - CarpetScriptServer runningScriptServer = (player.getServer() == null) ? scriptServer : Vanilla.MinecraftServer_getScriptServer(player.getServer()); + CarpetScriptServer runningScriptServer = (player.level().getServer() == null) ? scriptServer : Vanilla.MinecraftServer_getScriptServer(player.level().getServer()); if (runningScriptServer != null && !runningScriptServer.stopAll) { runningScriptServer.onPlayerLoggedOut(player, reason); } diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index d2a6bad9..82bba777 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -1006,7 +1006,7 @@ public class CarpetSettings { double from = worldBorder.getSize(); double to = worldBorder.getLerpTarget(); - long time = worldBorder.getLerpRemainingTime(); + long time = worldBorder.getLerpTime(); worldBorder.lerpSizeBetween(from, to, time); } } diff --git a/src/main/java/carpet/commands/PlayerCommand.java b/src/main/java/carpet/commands/PlayerCommand.java index 4ad63884..a20934c2 100644 --- a/src/main/java/carpet/commands/PlayerCommand.java +++ b/src/main/java/carpet/commands/PlayerCommand.java @@ -350,12 +350,12 @@ public class PlayerCommand Messenger.m(context.getSource(), "r Cannot shadow fake players"); return 0; } - if (player.getServer().isSingleplayerOwner(player.nameAndId())) { + if (player.level().getServer().isSingleplayerOwner(player.nameAndId())) { Messenger.m(context.getSource(), "r Cannot shadow single-player server owner"); return 0; } - EntityPlayerMPFake.createShadow(player.getServer(), player); + EntityPlayerMPFake.createShadow(player.level().getServer(), player); return 1; } } diff --git a/src/main/java/carpet/fakes/PistonHeadRenderStateInterface.java b/src/main/java/carpet/fakes/PistonHeadRenderStateInterface.java new file mode 100644 index 00000000..a1f0f7fc --- /dev/null +++ b/src/main/java/carpet/fakes/PistonHeadRenderStateInterface.java @@ -0,0 +1,8 @@ +package carpet.fakes; + +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; + +public interface PistonHeadRenderStateInterface { + public BlockEntityRenderState getMovedBERenderState(); + public void setMovedBERenderState(BlockEntityRenderState state); +} diff --git a/src/main/java/carpet/mixins/LevelChunk_movableBEMixin.java b/src/main/java/carpet/mixins/LevelChunk_movableBEMixin.java index 5ef7502a..155f66d5 100644 --- a/src/main/java/carpet/mixins/LevelChunk_movableBEMixin.java +++ b/src/main/java/carpet/mixins/LevelChunk_movableBEMixin.java @@ -18,10 +18,7 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunk; -import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.chunk.UpgradeData; +import net.minecraft.world.level.chunk.*; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.blending.BlendingData; import net.minecraft.world.level.lighting.LightEngine; @@ -39,8 +36,8 @@ public abstract class LevelChunk_movableBEMixin extends ChunkAccess implements W @Final Level level; - public LevelChunk_movableBEMixin(ChunkPos pos, UpgradeData upgradeData, LevelHeightAccessor heightLimitView, Registry biome, long inhabitedTime, @Nullable LevelChunkSection[] sectionArrayInitializer, @Nullable BlendingData blendingData) { - super(pos, upgradeData, heightLimitView, biome, inhabitedTime, sectionArrayInitializer, blendingData); + public LevelChunk_movableBEMixin(ChunkPos chunkPos, UpgradeData upgradeData, LevelHeightAccessor levelHeightAccessor, PalettedContainerFactory palettedContainerFactory, long l, @Nullable LevelChunkSection[] levelChunkSections, @Nullable BlendingData blendingData) { + super(chunkPos, upgradeData, levelHeightAccessor, palettedContainerFactory, l, levelChunkSections, blendingData); } @Shadow diff --git a/src/main/java/carpet/mixins/LevelRenderer_scarpetRenderMixin.java b/src/main/java/carpet/mixins/LevelRenderer_scarpetRenderMixin.java index b9366e8b..2da7a7b8 100644 --- a/src/main/java/carpet/mixins/LevelRenderer_scarpetRenderMixin.java +++ b/src/main/java/carpet/mixins/LevelRenderer_scarpetRenderMixin.java @@ -6,14 +6,18 @@ import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.framegraph.FrameGraphBuilder; import com.mojang.blaze3d.framegraph.FramePass; import net.minecraft.client.Camera; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderState; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelTargetBundle; import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.feature.FeatureRenderDispatcher; +import net.minecraft.util.profiling.ProfilerFiller; +import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -37,16 +41,17 @@ public class LevelRenderer_scarpetRenderMixin } @Inject(method = "addMainPass", at = @At("RETURN")) - private void renderScarpetThingsLate(FrameGraphBuilder frameGraphBuilder, Camera camera, float f, GpuBufferSlice fogParameters, CallbackInfo ci) + private void renderScarpetThingsLate(FrameGraphBuilder frameGraphBuilder, Frustum frustum, Camera camera, Matrix4f matrix4f, GpuBufferSlice gpuBufferSlice, boolean bl, LevelRenderState levelRenderState, DeltaTracker deltaTracker, ProfilerFiller profilerFiller, CallbackInfo ci) { // in normal circumstances we want to render shapes at the very end so it appears correctly behind stuff. // we might actually not need to play with render hooks here. //if (!FabricAPIHooks.WORLD_RENDER_EVENTS && CarpetClient.shapes != null ) if (CarpetClient.shapes != null) { + final float deltaPartialTick = deltaTracker.getGameTimeDeltaPartialTick(false); FramePass pass = frameGraphBuilder.addPass("scarpet_shapes"); targets.main = pass.readsAndWrites(targets.main); - pass.executes(() -> CarpetClient.shapes.render(null, camera, f)); + pass.executes(() -> CarpetClient.shapes.render(null, camera, deltaPartialTick)); featureRenderDispatcher.renderAllFeatures(); renderBuffers.bufferSource().endLastBatch(); } diff --git a/src/main/java/carpet/mixins/LivingEntity_cleanLogsMixin.java b/src/main/java/carpet/mixins/LivingEntity_cleanLogsMixin.java index 16b5306f..d11d32d4 100644 --- a/src/main/java/carpet/mixins/LivingEntity_cleanLogsMixin.java +++ b/src/main/java/carpet/mixins/LivingEntity_cleanLogsMixin.java @@ -23,6 +23,6 @@ public abstract class LivingEntity_cleanLogsMixin extends Entity @Redirect(method = "die", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;hasCustomName()Z")) private boolean shouldLogDeaths(LivingEntity livingEntity) { - return livingEntity.hasCustomName() && CarpetSettings.cleanLogs && livingEntity.getServer().getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES); + return livingEntity.hasCustomName() && CarpetSettings.cleanLogs && livingEntity.level().getServer().getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES); } } diff --git a/src/main/java/carpet/mixins/PistonHeadRenderState_movableBEMixin.java b/src/main/java/carpet/mixins/PistonHeadRenderState_movableBEMixin.java new file mode 100644 index 00000000..fe719ad6 --- /dev/null +++ b/src/main/java/carpet/mixins/PistonHeadRenderState_movableBEMixin.java @@ -0,0 +1,20 @@ +package carpet.mixins; + +import carpet.fakes.PistonHeadRenderStateInterface; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; +import net.minecraft.client.renderer.blockentity.state.PistonHeadRenderState; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(PistonHeadRenderState.class) +public class PistonHeadRenderState_movableBEMixin implements PistonHeadRenderStateInterface { + private BlockEntityRenderState blockEntityRenderState; + @Override + public BlockEntityRenderState getMovedBERenderState() { + return blockEntityRenderState; + } + + @Override + public void setMovedBERenderState(BlockEntityRenderState state) { + this.blockEntityRenderState = state; + } +} diff --git a/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java b/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java index 4627ad6c..16a9bbd3 100644 --- a/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java +++ b/src/main/java/carpet/mixins/PistonHeadRenderer_movableBEMixin.java @@ -1,14 +1,16 @@ package carpet.mixins; import carpet.CarpetSettings; +import carpet.fakes.PistonHeadRenderStateInterface; import carpet.fakes.PistonBlockEntityInterface; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.Minecraft; 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.blockentity.state.BlockEntityRenderState; +import net.minecraft.client.renderer.blockentity.state.PistonHeadRenderState; import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; @@ -17,48 +19,51 @@ 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 org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(PistonHeadRenderer.class) -public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRenderer +public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRenderer { BlockEntityRenderDispatcher dispatcher; @Inject(method = "", at = @At("TAIL")) - private void onInitCM(BlockEntityRendererProvider.Context arguments, CallbackInfo ci) + private void onInitCM(CallbackInfo ci) { - dispatcher = arguments.blockEntityRenderDispatcher(); + dispatcher = Minecraft.getInstance().getBlockEntityRenderDispatcher(); } - @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 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) + @Inject(method = "extractRenderState(Lnet/minecraft/world/level/block/piston/PistonMovingBlockEntity;Lnet/minecraft/client/renderer/blockentity/state/PistonHeadRenderState;FLnet/minecraft/world/phys/Vec3;Lnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V", + at = @At("RETURN")) + private void addBE(PistonMovingBlockEntity pistonMovingBlockEntity, PistonHeadRenderState pistonHeadRenderState, float f, Vec3 vec3, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay, CallbackInfo ci) { - if (!((PistonBlockEntityInterface) pistonBlockEntity_1).isRenderModeSet()) - ((PistonBlockEntityInterface) pistonBlockEntity_1).setRenderCarriedBlockEntity(CarpetSettings.movableBlockEntities && ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity() != null); - } - - - @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()) + if (CarpetSettings.movableBlockEntities) { - BlockEntity carriedBlockEntity = ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity(); - if (carriedBlockEntity != null) + BlockEntity be = ((PistonBlockEntityInterface) pistonMovingBlockEntity).getCarriedBlockEntity(); + if (be != null) { - // maybe ??? carriedBlockEntity.setPos(pistonBlockEntity_1.getPos()); - //((BlockEntityRenderDispatcherInterface) BlockEntityRenderDispatcher.INSTANCE).renderBlockEntityOffset(carriedBlockEntity, float_1, int_1, BlockRenderLayer.field_20799, bufferBuilder_1, pistonBlockEntity_1.getRenderOffsetX(float_1), pistonBlockEntity_1.getRenderOffsetY(float_1), pistonBlockEntity_1.getRenderOffsetZ(float_1)); - matrixStack_1.translate( - pistonBlockEntity_1.getXOff(partialTicks), - pistonBlockEntity_1.getYOff(partialTicks), - pistonBlockEntity_1.getZOff(partialTicks) - ); - dispatcher.submit(carriedBlockEntity, partialTicks, matrixStack_1, crumblingOverlay, submitNodeCollector); - + float progress = pistonMovingBlockEntity.getProgress(f); + //System.out.println("progress: " + progress); + //if (progress != 0) { + BlockEntityRenderState res = dispatcher.tryExtractRenderState(be, f, crumblingOverlay); + if (res != null) { + ((PistonHeadRenderStateInterface) pistonHeadRenderState).setMovedBERenderState(res); + } + //} } } } + + @Inject(method = "submit(Lnet/minecraft/client/renderer/blockentity/state/PistonHeadRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitMovingBlock(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/block/MovingBlockRenderState;)V", + ordinal = 0)) + private void endMethod(PistonHeadRenderState pistonHeadRenderState, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CallbackInfo ci) + //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 (pistonHeadRenderState instanceof PistonHeadRenderStateInterface mbrsi && pistonHeadRenderState.block != null) + if (mbrsi.getMovedBERenderState() != null) { + BlockEntityRenderState res = mbrsi.getMovedBERenderState(); + if (res != null) { + dispatcher.submit(res, poseStack, submitNodeCollector); + } + } + } } diff --git a/src/main/java/carpet/mixins/Player_antiCheatDisabledMixin.java b/src/main/java/carpet/mixins/Player_antiCheatDisabledMixin.java index 2a4b6ed0..6a9a8469 100644 --- a/src/main/java/carpet/mixins/Player_antiCheatDisabledMixin.java +++ b/src/main/java/carpet/mixins/Player_antiCheatDisabledMixin.java @@ -32,7 +32,7 @@ public abstract class Player_antiCheatDisabledMixin extends LivingEntity @Inject(method = "tryToStartFallFlying", at = @At("HEAD"), cancellable = true) private void allowDeploys(CallbackInfoReturnable cir) { - if (CarpetSettings.antiCheatDisabled && (Object)this instanceof ServerPlayer sp && sp.getServer().isDedicatedServer()) + if (CarpetSettings.antiCheatDisabled && (Object)this instanceof ServerPlayer sp && sp.level().getServer().isDedicatedServer()) { ItemStack itemStack_1 = equipment.get(EquipmentSlot.CHEST); if (itemStack_1.getItem() == Items.ELYTRA && !itemStack_1.nextDamageWillBreak()) { diff --git a/src/main/java/carpet/mixins/Player_parrotMixin.java b/src/main/java/carpet/mixins/Player_parrotMixin.java index ef01e4c6..636747f5 100644 --- a/src/main/java/carpet/mixins/Player_parrotMixin.java +++ b/src/main/java/carpet/mixins/Player_parrotMixin.java @@ -1,8 +1,10 @@ package carpet.mixins; import carpet.CarpetSettings; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -21,76 +23,21 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Player.class) public abstract class Player_parrotMixin extends LivingEntity { - @Shadow @Final public Abilities abilities; - @Shadow protected abstract void removeEntitiesOnShoulder(); - - @Shadow public abstract CompoundTag getShoulderEntityLeft(); - - @Shadow protected abstract void setShoulderEntityLeft(CompoundTag NbtCompound_1); - - @Shadow protected abstract void setShoulderEntityRight(CompoundTag NbtCompound_1); - - @Shadow public abstract CompoundTag getShoulderEntityRight(); - @Shadow protected abstract void respawnEntityOnShoulder(CompoundTag entityNbt); + protected Player_parrotMixin(EntityType entityType, Level level) { + super(entityType, level); + } - protected Player_parrotMixin(EntityType entityType_1, Level world_1) - { - super(entityType_1, world_1); - } - - @Redirect(method = "aiStep", at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;removeEntitiesOnShoulder()V")) - private void cancelDropShoulderEntities1(Player playerEntity) - { - - } - - @Inject(method = "aiStep", at = @At(value = "INVOKE", shift = At.Shift.AFTER, ordinal = 1, - target = "Lnet/minecraft/world/entity/player/Player;playShoulderEntityAmbientSound(Lnet/minecraft/nbt/CompoundTag;)V")) - private void onTickMovement(CallbackInfo ci) - { - boolean parrots_will_drop = !CarpetSettings.persistentParrots || this.abilities.invulnerable; - if (!this.level().isClientSide() && ((parrots_will_drop && this.fallDistance > 0.5F) || this.isInWater() || this.abilities.flying || isSleeping())) - { - this.removeEntitiesOnShoulder(); - } - } - @Redirect(method = "hurtServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;removeEntitiesOnShoulder()V")) private void cancelDropShoulderEntities2(Player playerEntity) { - - } - - protected void dismount_left() - { - respawnEntityOnShoulder(this.getShoulderEntityLeft()); - this.setShoulderEntityLeft(new CompoundTag()); - } - - protected void dismount_right() - { - respawnEntityOnShoulder(this.getShoulderEntityRight()); - this.setShoulderEntityRight(new CompoundTag()); - } - - @Inject(method = "hurtServer", at = @At(value = "INVOKE", shift = At.Shift.BEFORE, - target = "Lnet/minecraft/world/entity/player/Player;removeEntitiesOnShoulder()V")) - private void onDamage(ServerLevel serverLevel, DamageSource damageSource_1, float float_1, CallbackInfoReturnable cir) - { - if (CarpetSettings.persistentParrots && !this.isShiftKeyDown()) - { - if (this.random.nextFloat() < ((float_1)/15.0) ) - { - this.dismount_left(); - } - if (this.random.nextFloat() < ((float_1)/15.0) ) - { - this.dismount_right(); - } + if (!CarpetSettings.persistentParrots) { + removeEntitiesOnShoulder(); } } + + + } diff --git a/src/main/java/carpet/mixins/ServerGamePacketListenerImpl_scarpetEventsMixin.java b/src/main/java/carpet/mixins/ServerGamePacketListenerImpl_scarpetEventsMixin.java index f14d6385..a85d6108 100644 --- a/src/main/java/carpet/mixins/ServerGamePacketListenerImpl_scarpetEventsMixin.java +++ b/src/main/java/carpet/mixins/ServerGamePacketListenerImpl_scarpetEventsMixin.java @@ -257,7 +257,7 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin { if (PLAYER_CHOOSES_RECIPE.isNeeded()) { - RecipeManager.ServerDisplayInfo displayInfo = player.getServer().getRecipeManager().getRecipeFromDisplay(packet.recipe()); + RecipeManager.ServerDisplayInfo displayInfo = player.level().getServer().getRecipeManager().getRecipeFromDisplay(packet.recipe()); if (displayInfo == null) { return; } @@ -268,7 +268,7 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin @Inject(method = "handleSetCarriedItem", at = @At("HEAD")) private void onUpdatedSelectedSLot(ServerboundSetCarriedItemPacket packet, CallbackInfo ci) { - if (PLAYER_SWITCHES_SLOT.isNeeded() && player.getServer() != null && player.getServer().isSameThread()) + if (PLAYER_SWITCHES_SLOT.isNeeded() && player.level().getServer() != null && player.level().getServer().isSameThread()) { PLAYER_SWITCHES_SLOT.onSlotSwitch(player, player.getInventory().getSelectedSlot(), packet.getSlot()); } diff --git a/src/main/java/carpet/mixins/ServerPlayer_parrotMixin.java b/src/main/java/carpet/mixins/ServerPlayer_parrotMixin.java new file mode 100644 index 00000000..a393cec3 --- /dev/null +++ b/src/main/java/carpet/mixins/ServerPlayer_parrotMixin.java @@ -0,0 +1,80 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import com.mojang.authlib.GameProfile; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ServerPlayer.class) +public abstract class ServerPlayer_parrotMixin extends Player { + + @Shadow + public abstract CompoundTag getShoulderEntityLeft(); + + @Shadow protected abstract void setShoulderEntityLeft(CompoundTag NbtCompound_1); + + @Shadow protected abstract void setShoulderEntityRight(CompoundTag NbtCompound_1); + + @Shadow public abstract CompoundTag getShoulderEntityRight(); + + @Shadow protected abstract void respawnEntityOnShoulder(CompoundTag entityNbt); + + public ServerPlayer_parrotMixin(Level level, GameProfile gameProfile) { + super(level, gameProfile); + } + + + protected void dismount_left() + { + respawnEntityOnShoulder(this.getShoulderEntityLeft()); + this.setShoulderEntityLeft(new CompoundTag()); + } + + protected void dismount_right() + { + respawnEntityOnShoulder(this.getShoulderEntityRight()); + this.setShoulderEntityRight(new CompoundTag()); + } + + @Inject(method = "hurtServer", at = @At("HEAD")) + private void onDamage(ServerLevel serverLevel, DamageSource damageSource_1, float float_1, CallbackInfoReturnable cir) + { + if (CarpetSettings.persistentParrots && !this.isShiftKeyDown()) + { + if (this.random.nextFloat() < ((float_1)/15.0) ) + { + this.dismount_left(); + } + if (this.random.nextFloat() < ((float_1)/15.0) ) + { + this.dismount_right(); + } + } + } + + + @Redirect(method = "handleShoulderEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;removeEntitiesOnShoulder()V")) + private void onRespawnParrotsInstead(ServerPlayer serverPlayer) + { + if (!CarpetSettings.persistentParrots) + { + this.removeEntitiesOnShoulder(); + return; + } + if (((getAbilities().invulnerable && this.fallDistance > 0.5F) || this.isInWater() || this.getAbilities().flying || isSleeping() || isInPowderSnow)) + { + this.removeEntitiesOnShoulder(); + } + } +} diff --git a/src/main/java/carpet/mixins/StructureBlockRenderer_mixin.java b/src/main/java/carpet/mixins/StructureBlockRenderer_mixin.java index 9fddba60..707be33e 100644 --- a/src/main/java/carpet/mixins/StructureBlockRenderer_mixin.java +++ b/src/main/java/carpet/mixins/StructureBlockRenderer_mixin.java @@ -3,6 +3,7 @@ package carpet.mixins; import carpet.CarpetSettings; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityWithBoundingBoxRenderer; +import net.minecraft.client.renderer.blockentity.state.BlockEntityWithBoundingBoxRenderState; import net.minecraft.world.level.block.entity.StructureBlockEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -10,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BlockEntityWithBoundingBoxRenderer.class) -public abstract class StructureBlockRenderer_mixin implements BlockEntityRenderer +public abstract class StructureBlockRenderer_mixin implements BlockEntityRenderer { @Inject(method = "getViewDistance", at = @At("HEAD"), cancellable = true) void newLimit(CallbackInfoReturnable cir) diff --git a/src/main/java/carpet/network/ServerNetworkHandler.java b/src/main/java/carpet/network/ServerNetworkHandler.java index ed394c99..bb32684b 100644 --- a/src/main/java/carpet/network/ServerNetworkHandler.java +++ b/src/main/java/carpet/network/ServerNetworkHandler.java @@ -61,7 +61,7 @@ public class ServerNetworkHandler { CarpetSettings.LOG.warn("Player " + playerEntity.getName().getString() + " joined with another carpet version: " + version); } - DataBuilder data = DataBuilder.create(playerEntity.getServer()); // tickrate related settings are sent on world change + DataBuilder data = DataBuilder.create(playerEntity.level().getServer()); // tickrate related settings are sent on world change CarpetServer.forEachManager(sm -> sm.getCarpetRules().forEach(data::withRule)); playerEntity.connection.send(data.build()); } @@ -84,13 +84,13 @@ public class ServerNetworkHandler List output = new ArrayList<>(); Component[] error = {null}; int[] returnValue = {0}; - if (player.getServer() == null) + if (player.level().getServer() == null) { error[0] = Component.literal("No Server"); } else { - player.getServer().getCommands().performPrefixedCommand( + player.level().getServer().getCommands().performPrefixedCommand( new SnoopyCommandSource(player, error, output, returnValue), command ); } @@ -110,7 +110,7 @@ public class ServerNetworkHandler { result.put("output", outputResult); } - player.connection.send(DataBuilder.create(player.getServer()).withCustomNbt("clientCommand", result).build()); + player.connection.send(DataBuilder.create(player.level().getServer()).withCustomNbt("clientCommand", result).build()); // run command plug to command output, } @@ -137,7 +137,7 @@ public class ServerNetworkHandler } for (ServerPlayer player : remoteCarpetPlayers.keySet()) { - player.connection.send(DataBuilder.create(player.getServer()).withRule(rule).build()); + player.connection.send(DataBuilder.create(player.level().getServer()).withRule(rule).build()); } } @@ -149,7 +149,7 @@ public class ServerNetworkHandler } for (ServerPlayer player : validCarpetPlayers) { - player.connection.send(DataBuilder.create(player.getServer()).withCustomNbt(command, data).build()); + player.connection.send(DataBuilder.create(player.level().getServer()).withCustomNbt(command, data).build()); } } @@ -157,7 +157,7 @@ public class ServerNetworkHandler { if (isValidCarpetPlayer(player)) { - player.connection.send(DataBuilder.create(player.getServer()).withCustomNbt(command, data).build()); + player.connection.send(DataBuilder.create(player.level().getServer()).withCustomNbt(command, data).build()); } } diff --git a/src/main/java/carpet/patches/EntityPlayerMPFake.java b/src/main/java/carpet/patches/EntityPlayerMPFake.java index d7cfe239..38ae1d59 100644 --- a/src/main/java/carpet/patches/EntityPlayerMPFake.java +++ b/src/main/java/carpet/patches/EntityPlayerMPFake.java @@ -123,7 +123,7 @@ public class EntityPlayerMPFake extends ServerPlayer public static EntityPlayerMPFake createShadow(MinecraftServer server, ServerPlayer player) { - player.getServer().getPlayerList().remove(player); + player.level().getServer().getPlayerList().remove(player); player.connection.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login")); ServerLevel worldIn = player.level();//.getWorld(player.dimension); GameProfile gameprofile = player.getGameProfile(); @@ -182,7 +182,7 @@ public class EntityPlayerMPFake extends ServerPlayer if (reason.getContents() instanceof TranslatableContents text && text.getKey().equals("multiplayer.disconnect.duplicate_login")) { this.connection.onDisconnect(new DisconnectionDetails(reason)); } else { - this.getServer().schedule(new TickTask(this.getServer().getTickCount(), () -> { + this.level().getServer().schedule(new TickTask(this.level().getServer().getTickCount(), () -> { this.connection.onDisconnect(new DisconnectionDetails(reason)); })); } @@ -191,7 +191,7 @@ public class EntityPlayerMPFake extends ServerPlayer @Override public void tick() { - if (this.getServer().getTickCount() % 10 == 0) + if (this.level().getServer().getTickCount() % 10 == 0) { this.connection.resetPosition(); this.level().getChunkSource().move(this); diff --git a/src/main/java/carpet/patches/TickSyncedBorderExtent.java b/src/main/java/carpet/patches/TickSyncedBorderExtent.java index fde797e5..ea90f8c6 100644 --- a/src/main/java/carpet/patches/TickSyncedBorderExtent.java +++ b/src/main/java/carpet/patches/TickSyncedBorderExtent.java @@ -81,7 +81,7 @@ public class TickSyncedBorderExtent implements WorldBorder.BorderExtent } @Override - public long getLerpRemainingTime() + public long getLerpTime() { // Rough estimation MinecraftServer server = CarpetServer.minecraft_server; @@ -143,10 +143,7 @@ public class TickSyncedBorderExtent implements WorldBorder.BorderExtent { // We do not want to update DelegateBorderChangeListener // This updates borders in other dimensions - if (!(listener instanceof BorderChangeListener.DelegateBorderChangeListener)) - { - listener.onBorderSizeLerping(this.border, this.from, this.to, this.realDuration); - } + listener.onLerpSize(this.border, this.from, this.to, this.realDuration); } } diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index 6aa33dd3..f627f1fa 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -886,7 +886,7 @@ public class CarpetEventServer new NumericValue(amount), StringValue.of(source.getMsgId()), source.getEntity() == null ? Value.NULL : new EntityValue(source.getEntity()) - ), () -> target.getServer().createCommandSourceStack()); + ), () -> target.level().getServer().createCommandSourceStack()); } }; public static final Event PLAYER_DEALS_DAMAGE = new Event("player_deals_damage", 3, false) @@ -896,7 +896,7 @@ public class CarpetEventServer { return handler.call(() -> Arrays.asList(new EntityValue(source.getEntity()), new NumericValue(amount), new EntityValue(target)), - () -> source.getEntity().getServer().createCommandSourceStack() + () -> source.getEntity().level().getServer().createCommandSourceStack() ); } }; @@ -1108,7 +1108,7 @@ public class CarpetEventServer { handler.call( () -> Collections.singletonList(new EntityValue(entity)), - () -> entity.getServer().createCommandSourceStack().withLevel((ServerLevel) entity.level()).withPermission(Vanilla.MinecraftServer_getRunPermissionLevel(entity.getServer())) + () -> entity.level().getServer().createCommandSourceStack().withLevel((ServerLevel) entity.level()).withPermission(Vanilla.MinecraftServer_getRunPermissionLevel(entity.level().getServer())) ); } })).collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue)); @@ -1127,7 +1127,7 @@ public class CarpetEventServer { handler.call( () -> Arrays.asList(new EntityValue(entity), BooleanValue.of(created)), - () -> entity.getServer().createCommandSourceStack().withLevel((ServerLevel) entity.level()).withPermission(Vanilla.MinecraftServer_getRunPermissionLevel(entity.getServer())) + () -> entity.level().getServer().createCommandSourceStack().withLevel((ServerLevel) entity.level()).withPermission(Vanilla.MinecraftServer_getRunPermissionLevel(entity.level().getServer())) ); } })) diff --git a/src/main/java/carpet/script/EntityEventsGroup.java b/src/main/java/carpet/script/EntityEventsGroup.java index 6eaf9fc5..900bafeb 100644 --- a/src/main/java/carpet/script/EntityEventsGroup.java +++ b/src/main/java/carpet/script/EntityEventsGroup.java @@ -49,7 +49,7 @@ public class EntityEventsGroup { return; } - CarpetScriptServer scriptServer = Vanilla.MinecraftServer_getScriptServer(entity.getServer()); + CarpetScriptServer scriptServer = Vanilla.MinecraftServer_getScriptServer(entity.level().getServer()); if (scriptServer.stopAll) { return; // executed after world is closin down @@ -64,7 +64,7 @@ public class EntityEventsGroup iterator.remove(); continue; } - if (key.user() != null && entity.getServer().getPlayerList().getPlayerByName(key.user()) == null) + if (key.user() != null && entity.level().getServer().getPlayerList().getPlayerByName(key.user()) == null) { iterator.remove(); continue; @@ -170,7 +170,7 @@ public class EntityEventsGroup public CarpetEventServer.CallbackResult call(CarpetEventServer.Callback tickCall, Entity entity, Object... args) { assert args.length == argcount - 1; - return tickCall.execute((entity instanceof ServerPlayer player ? player.createCommandSourceStack() : entity.getServer().createCommandSourceStack()), makeArgs(entity, args)); + return tickCall.execute((entity instanceof ServerPlayer player ? player.createCommandSourceStack() : entity.level().getServer().createCommandSourceStack()), makeArgs(entity, args)); } protected List makeArgs(Entity entity, Object... args) diff --git a/src/main/java/carpet/script/annotation/Param.java b/src/main/java/carpet/script/annotation/Param.java index 665d6029..703bece6 100644 --- a/src/main/java/carpet/script/annotation/Param.java +++ b/src/main/java/carpet/script/annotation/Param.java @@ -212,7 +212,7 @@ public interface Param registerStrictConverter(Component.class, false, new SimpleTypeConverter<>(FormattedTextValue.class, FormattedTextValue::getText, "text")); registerStrictConverter(Component.class, true, new SimpleTypeConverter<>(StringValue.class, FormattedTextValue::getTextByValue, "text")); registerStrictConverter(ServerPlayer.class, false, new SimpleTypeConverter<>(EntityValue.class, - v -> EntityValue.getPlayerByValue(v.getEntity().getServer(), v), "online player entity")); + v -> EntityValue.getPlayerByValue(v.getEntity().level().getServer(), v), "online player entity")); registerStrictConverter(Boolean.class, false, new SimpleTypeConverter<>(BooleanValue.class, BooleanValue::getBoolean, "boolean")); registerStrictConverter(Boolean.class, true, new SimpleTypeConverter<>(NumericValue.class, NumericValue::getBoolean, "boolean")); } diff --git a/src/main/java/carpet/script/utils/ShapeDispatcher.java b/src/main/java/carpet/script/utils/ShapeDispatcher.java index d37ae3f8..fca460ff 100644 --- a/src/main/java/carpet/script/utils/ShapeDispatcher.java +++ b/src/main/java/carpet/script/utils/ShapeDispatcher.java @@ -762,7 +762,7 @@ public class ShapeDispatcher { return p -> { ParticleOptions particle; - Registry blocks = p.getServer().registryAccess().lookupOrThrow(Registries.BLOCK); + Registry blocks = p.level().getServer().registryAccess().lookupOrThrow(Registries.BLOCK); if (this.isitem) { if (Block.byItem(this.item.getItem()).defaultBlockState().isAir()) diff --git a/src/main/java/carpet/script/utils/ShapesRenderer.java b/src/main/java/carpet/script/utils/ShapesRenderer.java index 6e5ad40b..be4be1e3 100644 --- a/src/main/java/carpet/script/utils/ShapesRenderer.java +++ b/src/main/java/carpet/script/utils/ShapesRenderer.java @@ -33,6 +33,7 @@ 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.blockentity.state.BlockEntityRenderState; import net.minecraft.client.renderer.entity.state.EntityRenderState; import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -438,11 +439,17 @@ public class ShapesRenderer } if (BlockEntity != null) { - BlockEntityRenderer blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity); - if (blockEntityRenderer != null) + BlockEntityRenderer blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity); + BlockEntityRenderState state = client.getBlockEntityRenderDispatcher().tryExtractRenderState(BlockEntity, partialTick, null); + + + + if (blockEntityRenderer != null && state != null) { - blockEntityRenderer.submit(BlockEntity, partialTick, - matrices, light, OverlayTexture.NO_OVERLAY, camera1.getPosition(), null, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage()); + // testme partial positions + blockEntityRenderer.submit(state, matrices,client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage()); + //blockEntityRenderer.submit(BlockEntity, partialTick, + // matrices, light, OverlayTexture.NO_OVERLAY, camera1.getPosition(), null, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage()); } } diff --git a/src/main/java/carpet/script/utils/SnoopyCommandSource.java b/src/main/java/carpet/script/utils/SnoopyCommandSource.java index d55552c9..720910c9 100644 --- a/src/main/java/carpet/script/utils/SnoopyCommandSource.java +++ b/src/main/java/carpet/script/utils/SnoopyCommandSource.java @@ -70,12 +70,12 @@ public class SnoopyCommandSource extends CommandSourceStack { super(player.commandSource(), player.position(), player.getRotationVector(), player.level() instanceof final ServerLevel serverLevel ? serverLevel : null, - player.getServer().getProfilePermissions(player.nameAndId()), player.getName().getString(), player.getDisplayName(), + player.level().getServer().getProfilePermissions(player.nameAndId()), player.getName().getString(), player.getDisplayName(), player.level().getServer(), player); this.output = player.commandSource(); this.position = player.position(); this.world = player.level() instanceof final ServerLevel serverLevel ? serverLevel : null; - this.level = player.getServer().getProfilePermissions(player.nameAndId()); + this.level = player.level().getServer().getProfilePermissions(player.nameAndId()); this.simpleName = player.getName().getString(); this.name = player.getDisplayName(); this.server = player.level().getServer(); @@ -86,7 +86,7 @@ public class SnoopyCommandSource extends CommandSourceStack this.error = error; this.chatOutput = output; this.signingContext = CommandSigningContext.ANONYMOUS; - this.taskChainer = TaskChainer.immediate(player.getServer()); + this.taskChainer = TaskChainer.immediate(player.level().getServer()); } private SnoopyCommandSource(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String simpleName, Component name, MinecraftServer server, @Nullable Entity entity, CommandResultCallback consumer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext context, TaskChainer chainer, diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 6b78a948..600158b1 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -134,7 +134,7 @@ public class EntityValue extends Value { if (entity instanceof ServerPlayer serverPlayer && Vanilla.ServerPlayer_isInvalidEntityObject(serverPlayer)) { - ServerPlayer newPlayer = entity.getServer().getPlayerList().getPlayer(entity.getUUID()); + ServerPlayer newPlayer = entity.level().getServer().getPlayerList().getPlayer(entity.getUUID()); if (newPlayer != null) { entity = newPlayer; @@ -458,14 +458,14 @@ public class EntityValue extends Value put("scoreboard_tags", (e, a) -> ListValue.wrap(e.getTags().stream().map(StringValue::new))); put("entity_tags", (e, a) -> { EntityType type = e.getType(); - return ListValue.wrap(e.getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).getTags().filter(entry -> entry.stream().anyMatch(h -> h.value() == type)).map(entry -> ValueConversions.of(entry))); + return ListValue.wrap(e.level().getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).getTags().filter(entry -> entry.stream().anyMatch(h -> h.value() == type)).map(entry -> ValueConversions.of(entry))); }); // deprecated put("has_tag", (e, a) -> BooleanValue.of(e.getTags().contains(a.getString()))); put("has_scoreboard_tag", (e, a) -> BooleanValue.of(e.getTags().contains(a.getString()))); put("has_entity_tag", (e, a) -> { - Optional>> tag = e.getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).get(TagKey.create(Registries.ENTITY_TYPE, InputValidator.identifierOf(a.getString()))); + Optional>> tag = e.level().getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).get(TagKey.create(Registries.ENTITY_TYPE, InputValidator.identifierOf(a.getString()))); if (tag.isEmpty()) { return Value.NULL; @@ -505,7 +505,7 @@ public class EntityValue extends Value put("despawn_timer", (e, a) -> e instanceof LivingEntity le ? new NumericValue(le.getNoActionTime()) : Value.NULL); put("blue_skull", (e, a) -> e instanceof WitherSkull w ? BooleanValue.of(w.isDangerous()) : Value.NULL); put("offering_flower", (e, a) -> e instanceof IronGolem ig ? BooleanValue.of(ig.getOfferFlowerTick() > 0) : Value.NULL); - put("item", (e, a) -> e instanceof ItemEntity ie ? ValueConversions.of(ie.getItem(), e.getServer().registryAccess()) : e instanceof ItemFrame frame ? ValueConversions.of(frame.getItem(), e.getServer().registryAccess()) : Value.NULL); + put("item", (e, a) -> e instanceof ItemEntity ie ? ValueConversions.of(ie.getItem(), e.level().getServer().registryAccess()) : e instanceof ItemFrame frame ? ValueConversions.of(frame.getItem(), e.level().getServer().registryAccess()) : Value.NULL); put("count", (e, a) -> (e instanceof ItemEntity ie) ? new NumericValue(ie.getItem().getCount()) : Value.NULL); put("pickup_delay", (e, a) -> (e instanceof ItemEntity ie) ? new NumericValue(Vanilla.ItemEntity_getPickupDelay(ie)) : Value.NULL); put("portal_cooldown", (e, a) -> new NumericValue(Vanilla.Entity_getPublicNetherPortalCooldown(e))); @@ -693,7 +693,7 @@ public class EntityValue extends Value } if (e instanceof LivingEntity le) { - return ValueConversions.of(le.getItemBySlot(where), e.getServer().registryAccess()); + return ValueConversions.of(le.getItemBySlot(where), e.level().getServer().registryAccess()); } return Value.NULL; }); @@ -1376,7 +1376,7 @@ public class EntityValue extends Value if (params.size() > blockLocator.offset) { Value worldValue = params.get(blockLocator.offset); - world = ValueConversions.dimFromValue(worldValue, spe.getServer()).dimension(); + world = ValueConversions.dimFromValue(worldValue, spe.level().getServer()).dimension(); if (params.size() > blockLocator.offset + 1) { angle = NumericValue.asNumber(params.get(blockLocator.offset + 1), "angle").getFloat(); diff --git a/src/main/java/carpet/script/value/ScreenValue.java b/src/main/java/carpet/script/value/ScreenValue.java index 9f436eab..eb1625fe 100644 --- a/src/main/java/carpet/script/value/ScreenValue.java +++ b/src/main/java/carpet/script/value/ScreenValue.java @@ -200,7 +200,7 @@ public class ScreenValue extends Value this.screenHandler = null; return false; } - int runPermissionLevel = Vanilla.MinecraftServer_getRunPermissionLevel(player.getServer()); + int runPermissionLevel = Vanilla.MinecraftServer_getRunPermissionLevel(player.level().getServer()); CommandSourceStack source = player.createCommandSourceStack().withPermission(runPermissionLevel); CarpetScriptHost executingHost = appHost.retrieveForExecution(source, player); try diff --git a/src/main/java/carpet/script/value/ValueConversions.java b/src/main/java/carpet/script/value/ValueConversions.java index f9622974..14780cb4 100644 --- a/src/main/java/carpet/script/value/ValueConversions.java +++ b/src/main/java/carpet/script/value/ValueConversions.java @@ -89,7 +89,7 @@ public class ValueConversions return ListValue.of(StringValue.of(Colors.mapColourName.get(color)), ofRGB(color.col)); } - public static Value of(MinMaxBounds range) + public static > Value of(MinMaxBounds range) { return ListValue.of( range.min().map(NumericValue::of).orElse(Value.NULL), diff --git a/src/main/java/carpet/utils/WoolTool.java b/src/main/java/carpet/utils/WoolTool.java index c8ba39a0..53387bd2 100644 --- a/src/main/java/carpet/utils/WoolTool.java +++ b/src/main/java/carpet/utils/WoolTool.java @@ -109,7 +109,7 @@ public class WoolTool DyeColor under = getWoolColorAtPosition(worldIn, pos.below()); if (under == null) return; HopperCounter counter = HopperCounter.getCounter(under); - counter.reset(placer.getServer()); + counter.reset(placer.level().getServer()); List res = new ArrayList<>(); res.add(Messenger.s(String.format("%s counter reset",under.toString()))); Messenger.send(placer, res); diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 366ebf76..df0cb888 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -78,6 +78,7 @@ "ServerGamePacketListenerImpl_scarpetEventsMixin", "ServerPlayerGameMode_scarpetEventsMixin", "Player_parrotMixin", + "ServerPlayer_parrotMixin", "SaplingBlock_desertShrubsMixin", "EntityMixin", "Guardian_renewableSpongesMixin", @@ -189,6 +190,7 @@ "Gui_tablistMixin", "PlayerTabOverlayMixin", "PistonHeadRenderer_movableBEMixin", + "PistonHeadRenderState_movableBEMixin", "StructureBlockRenderer_mixin", "ClientPacketListener_clientCommandMixin", "ClientPacketListener_explosionMixin",