This commit is contained in:
gnembon committed 2025-09-04 02:08:10 +02:00
1 parent 6533716c93
commit f371e2e8bd
29 files changed
+222 -153

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check https://fabricmc.net/develop/ # check https://fabricmc.net/develop/
minecraft_version=25w35a minecraft_version=25w36b
loader_version=0.16.14 loader_version=0.16.14
jsr305_version=3.0.2 jsr305_version=3.0.2
fabric_version=0.119.5+1.21.5 fabric_version=0.119.5+1.21.5
+1 -1
View File
@@ -162,7 +162,7 @@ public class CarpetServer // static for now - easier to handle all around the co
LoggerRegistry.playerDisconnected(player); LoggerRegistry.playerDisconnected(player);
extensions.forEach(e -> e.onPlayerLoggedOut(player)); extensions.forEach(e -> e.onPlayerLoggedOut(player));
// first case client, second case server // 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) { if (runningScriptServer != null && !runningScriptServer.stopAll) {
runningScriptServer.onPlayerLoggedOut(player, reason); runningScriptServer.onPlayerLoggedOut(player, reason);
} }
+1 -1
View File
@@ -1006,7 +1006,7 @@ public class CarpetSettings
{ {
double from = worldBorder.getSize(); double from = worldBorder.getSize();
double to = worldBorder.getLerpTarget(); double to = worldBorder.getLerpTarget();
long time = worldBorder.getLerpRemainingTime(); long time = worldBorder.getLerpTime();
worldBorder.lerpSizeBetween(from, to, time); worldBorder.lerpSizeBetween(from, to, time);
} }
} }
@@ -350,12 +350,12 @@ public class PlayerCommand
Messenger.m(context.getSource(), "r Cannot shadow fake players"); Messenger.m(context.getSource(), "r Cannot shadow fake players");
return 0; 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"); Messenger.m(context.getSource(), "r Cannot shadow single-player server owner");
return 0; return 0;
} }
EntityPlayerMPFake.createShadow(player.getServer(), player); EntityPlayerMPFake.createShadow(player.level().getServer(), player);
return 1; return 1;
} }
} }
@@ -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);
}
@@ -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.entity.BlockEntity;
import net.minecraft.world.level.block.piston.MovingPistonBlock; import net.minecraft.world.level.block.piston.MovingPistonBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.*;
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.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.blending.BlendingData; import net.minecraft.world.level.levelgen.blending.BlendingData;
import net.minecraft.world.level.lighting.LightEngine; import net.minecraft.world.level.lighting.LightEngine;
@@ -39,8 +36,8 @@ public abstract class LevelChunk_movableBEMixin extends ChunkAccess implements W
@Final @Final
Level level; Level level;
public LevelChunk_movableBEMixin(ChunkPos pos, UpgradeData upgradeData, LevelHeightAccessor heightLimitView, Registry<Biome> biome, long inhabitedTime, @Nullable LevelChunkSection[] sectionArrayInitializer, @Nullable BlendingData blendingData) { public LevelChunk_movableBEMixin(ChunkPos chunkPos, UpgradeData upgradeData, LevelHeightAccessor levelHeightAccessor, PalettedContainerFactory palettedContainerFactory, long l, @Nullable LevelChunkSection[] levelChunkSections, @Nullable BlendingData blendingData) {
super(pos, upgradeData, heightLimitView, biome, inhabitedTime, sectionArrayInitializer, blendingData); super(chunkPos, upgradeData, levelHeightAccessor, palettedContainerFactory, l, levelChunkSections, blendingData);
} }
@Shadow @Shadow
@@ -6,14 +6,18 @@ import com.mojang.blaze3d.buffers.GpuBufferSlice;
import com.mojang.blaze3d.framegraph.FrameGraphBuilder; import com.mojang.blaze3d.framegraph.FrameGraphBuilder;
import com.mojang.blaze3d.framegraph.FramePass; import com.mojang.blaze3d.framegraph.FramePass;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.LevelRenderState; import net.minecraft.client.renderer.LevelRenderState;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LevelTargetBundle; import net.minecraft.client.renderer.LevelTargetBundle;
import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.client.renderer.RenderBuffers;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; 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.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.feature.FeatureRenderDispatcher; 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.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@@ -37,16 +41,17 @@ public class LevelRenderer_scarpetRenderMixin
} }
@Inject(method = "addMainPass", at = @At("RETURN")) @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. // 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. // we might actually not need to play with render hooks here.
//if (!FabricAPIHooks.WORLD_RENDER_EVENTS && CarpetClient.shapes != null ) //if (!FabricAPIHooks.WORLD_RENDER_EVENTS && CarpetClient.shapes != null )
if (CarpetClient.shapes != null) if (CarpetClient.shapes != null)
{ {
final float deltaPartialTick = deltaTracker.getGameTimeDeltaPartialTick(false);
FramePass pass = frameGraphBuilder.addPass("scarpet_shapes"); FramePass pass = frameGraphBuilder.addPass("scarpet_shapes");
targets.main = pass.readsAndWrites(targets.main); targets.main = pass.readsAndWrites(targets.main);
pass.executes(() -> CarpetClient.shapes.render(null, camera, f)); pass.executes(() -> CarpetClient.shapes.render(null, camera, deltaPartialTick));
featureRenderDispatcher.renderAllFeatures(); featureRenderDispatcher.renderAllFeatures();
renderBuffers.bufferSource().endLastBatch(); renderBuffers.bufferSource().endLastBatch();
} }
@@ -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")) @Redirect(method = "die", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;hasCustomName()Z"))
private boolean shouldLogDeaths(LivingEntity livingEntity) 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);
} }
} }
@@ -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;
}
}
@@ -1,14 +1,16 @@
package carpet.mixins; package carpet.mixins;
import carpet.CarpetSettings; import carpet.CarpetSettings;
import carpet.fakes.PistonHeadRenderStateInterface;
import carpet.fakes.PistonBlockEntityInterface; import carpet.fakes.PistonBlockEntityInterface;
import com.mojang.blaze3d.vertex.PoseStack; 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.SubmitNodeCollector;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; 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.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.client.renderer.feature.ModelFeatureRenderer;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.piston.PistonMovingBlockEntity; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(PistonHeadRenderer.class) @Mixin(PistonHeadRenderer.class)
public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRenderer<PistonMovingBlockEntity> public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRenderer<PistonMovingBlockEntity, PistonHeadRenderState>
{ {
BlockEntityRenderDispatcher dispatcher; BlockEntityRenderDispatcher dispatcher;
@Inject(method = "<init>", at = @At("TAIL")) @Inject(method = "<init>", 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", @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",
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", at = @At("RETURN"))
ordinal = 3)) private void addBE(PistonMovingBlockEntity pistonMovingBlockEntity, PistonHeadRenderState pistonHeadRenderState, float f, Vec3 vec3, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay, 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()) if (CarpetSettings.movableBlockEntities)
((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())
{ {
BlockEntity carriedBlockEntity = ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity(); BlockEntity be = ((PistonBlockEntityInterface) pistonMovingBlockEntity).getCarriedBlockEntity();
if (carriedBlockEntity != null) if (be != null)
{ {
// maybe ??? carriedBlockEntity.setPos(pistonBlockEntity_1.getPos()); float progress = pistonMovingBlockEntity.getProgress(f);
//((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)); //System.out.println("progress: " + progress);
matrixStack_1.translate( //if (progress != 0) {
pistonBlockEntity_1.getXOff(partialTicks), BlockEntityRenderState res = dispatcher.tryExtractRenderState(be, f, crumblingOverlay);
pistonBlockEntity_1.getYOff(partialTicks), if (res != null) {
pistonBlockEntity_1.getZOff(partialTicks) ((PistonHeadRenderStateInterface) pistonHeadRenderState).setMovedBERenderState(res);
); }
dispatcher.submit(carriedBlockEntity, partialTicks, matrixStack_1, crumblingOverlay, submitNodeCollector); //}
} }
} }
} }
@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);
}
}
}
} }
@@ -32,7 +32,7 @@ public abstract class Player_antiCheatDisabledMixin extends LivingEntity
@Inject(method = "tryToStartFallFlying", at = @At("HEAD"), cancellable = true) @Inject(method = "tryToStartFallFlying", at = @At("HEAD"), cancellable = true)
private void allowDeploys(CallbackInfoReturnable<Boolean> cir) private void allowDeploys(CallbackInfoReturnable<Boolean> 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); ItemStack itemStack_1 = equipment.get(EquipmentSlot.CHEST);
if (itemStack_1.getItem() == Items.ELYTRA && !itemStack_1.nextDamageWillBreak()) { if (itemStack_1.getItem() == Items.ELYTRA && !itemStack_1.nextDamageWillBreak()) {
@@ -1,8 +1,10 @@
package carpet.mixins; package carpet.mixins;
import carpet.CarpetSettings; import carpet.CarpetSettings;
import com.mojang.authlib.GameProfile;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
@@ -21,76 +23,21 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Player.class) @Mixin(Player.class)
public abstract class Player_parrotMixin extends LivingEntity public abstract class Player_parrotMixin extends LivingEntity
{ {
@Shadow @Final public Abilities abilities;
@Shadow protected abstract void removeEntitiesOnShoulder(); @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<? extends LivingEntity> entityType, Level level) {
super(entityType, level);
}
protected Player_parrotMixin(EntityType<? extends LivingEntity> 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", @Redirect(method = "hurtServer", at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/entity/player/Player;removeEntitiesOnShoulder()V")) target = "Lnet/minecraft/world/entity/player/Player;removeEntitiesOnShoulder()V"))
private void cancelDropShoulderEntities2(Player playerEntity) private void cancelDropShoulderEntities2(Player playerEntity)
{ {
if (!CarpetSettings.persistentParrots) {
} removeEntitiesOnShoulder();
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<Boolean> 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();
}
} }
} }
} }
@@ -257,7 +257,7 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin
{ {
if (PLAYER_CHOOSES_RECIPE.isNeeded()) 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) { if (displayInfo == null) {
return; return;
} }
@@ -268,7 +268,7 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin
@Inject(method = "handleSetCarriedItem", at = @At("HEAD")) @Inject(method = "handleSetCarriedItem", at = @At("HEAD"))
private void onUpdatedSelectedSLot(ServerboundSetCarriedItemPacket packet, CallbackInfo ci) 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()); PLAYER_SWITCHES_SLOT.onSlotSwitch(player, player.getInventory().getSelectedSlot(), packet.getSlot());
} }
@@ -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<Boolean> 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();
}
}
}
@@ -3,6 +3,7 @@ package carpet.mixins;
import carpet.CarpetSettings; import carpet.CarpetSettings;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityWithBoundingBoxRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityWithBoundingBoxRenderer;
import net.minecraft.client.renderer.blockentity.state.BlockEntityWithBoundingBoxRenderState;
import net.minecraft.world.level.block.entity.StructureBlockEntity; import net.minecraft.world.level.block.entity.StructureBlockEntity;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(BlockEntityWithBoundingBoxRenderer.class) @Mixin(BlockEntityWithBoundingBoxRenderer.class)
public abstract class StructureBlockRenderer_mixin implements BlockEntityRenderer<StructureBlockEntity> public abstract class StructureBlockRenderer_mixin implements BlockEntityRenderer<StructureBlockEntity, BlockEntityWithBoundingBoxRenderState>
{ {
@Inject(method = "getViewDistance", at = @At("HEAD"), cancellable = true) @Inject(method = "getViewDistance", at = @At("HEAD"), cancellable = true)
void newLimit(CallbackInfoReturnable<Integer> cir) void newLimit(CallbackInfoReturnable<Integer> cir)
@@ -61,7 +61,7 @@ public class ServerNetworkHandler
{ {
CarpetSettings.LOG.warn("Player " + playerEntity.getName().getString() + " joined with another carpet version: " + version); 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)); CarpetServer.forEachManager(sm -> sm.getCarpetRules().forEach(data::withRule));
playerEntity.connection.send(data.build()); playerEntity.connection.send(data.build());
} }
@@ -84,13 +84,13 @@ public class ServerNetworkHandler
List<Component> output = new ArrayList<>(); List<Component> output = new ArrayList<>();
Component[] error = {null}; Component[] error = {null};
int[] returnValue = {0}; int[] returnValue = {0};
if (player.getServer() == null) if (player.level().getServer() == null)
{ {
error[0] = Component.literal("No Server"); error[0] = Component.literal("No Server");
} }
else else
{ {
player.getServer().getCommands().performPrefixedCommand( player.level().getServer().getCommands().performPrefixedCommand(
new SnoopyCommandSource(player, error, output, returnValue), command new SnoopyCommandSource(player, error, output, returnValue), command
); );
} }
@@ -110,7 +110,7 @@ public class ServerNetworkHandler
{ {
result.put("output", outputResult); 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, // run command plug to command output,
} }
@@ -137,7 +137,7 @@ public class ServerNetworkHandler
} }
for (ServerPlayer player : remoteCarpetPlayers.keySet()) 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) 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)) 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());
} }
} }
@@ -123,7 +123,7 @@ public class EntityPlayerMPFake extends ServerPlayer
public static EntityPlayerMPFake createShadow(MinecraftServer server, ServerPlayer player) 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")); player.connection.disconnect(Component.translatable("multiplayer.disconnect.duplicate_login"));
ServerLevel worldIn = player.level();//.getWorld(player.dimension); ServerLevel worldIn = player.level();//.getWorld(player.dimension);
GameProfile gameprofile = player.getGameProfile(); 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")) { if (reason.getContents() instanceof TranslatableContents text && text.getKey().equals("multiplayer.disconnect.duplicate_login")) {
this.connection.onDisconnect(new DisconnectionDetails(reason)); this.connection.onDisconnect(new DisconnectionDetails(reason));
} else { } 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)); this.connection.onDisconnect(new DisconnectionDetails(reason));
})); }));
} }
@@ -191,7 +191,7 @@ public class EntityPlayerMPFake extends ServerPlayer
@Override @Override
public void tick() public void tick()
{ {
if (this.getServer().getTickCount() % 10 == 0) if (this.level().getServer().getTickCount() % 10 == 0)
{ {
this.connection.resetPosition(); this.connection.resetPosition();
this.level().getChunkSource().move(this); this.level().getChunkSource().move(this);
@@ -81,7 +81,7 @@ public class TickSyncedBorderExtent implements WorldBorder.BorderExtent
} }
@Override @Override
public long getLerpRemainingTime() public long getLerpTime()
{ {
// Rough estimation // Rough estimation
MinecraftServer server = CarpetServer.minecraft_server; MinecraftServer server = CarpetServer.minecraft_server;
@@ -143,10 +143,7 @@ public class TickSyncedBorderExtent implements WorldBorder.BorderExtent
{ {
// We do not want to update DelegateBorderChangeListener // We do not want to update DelegateBorderChangeListener
// This updates borders in other dimensions // This updates borders in other dimensions
if (!(listener instanceof BorderChangeListener.DelegateBorderChangeListener)) listener.onLerpSize(this.border, this.from, this.to, this.realDuration);
{
listener.onBorderSizeLerping(this.border, this.from, this.to, this.realDuration);
}
} }
} }
@@ -886,7 +886,7 @@ public class CarpetEventServer
new NumericValue(amount), new NumericValue(amount),
StringValue.of(source.getMsgId()), StringValue.of(source.getMsgId()),
source.getEntity() == null ? Value.NULL : new EntityValue(source.getEntity()) 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) public static final Event PLAYER_DEALS_DAMAGE = new Event("player_deals_damage", 3, false)
@@ -896,7 +896,7 @@ public class CarpetEventServer
{ {
return handler.call(() -> return handler.call(() ->
Arrays.asList(new EntityValue(source.getEntity()), new NumericValue(amount), new EntityValue(target)), 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( handler.call(
() -> Collections.singletonList(new EntityValue(entity)), () -> 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)); })).collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue));
@@ -1127,7 +1127,7 @@ public class CarpetEventServer
{ {
handler.call( handler.call(
() -> Arrays.asList(new EntityValue(entity), BooleanValue.of(created)), () -> 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()))
); );
} }
})) }))
@@ -49,7 +49,7 @@ public class EntityEventsGroup
{ {
return; return;
} }
CarpetScriptServer scriptServer = Vanilla.MinecraftServer_getScriptServer(entity.getServer()); CarpetScriptServer scriptServer = Vanilla.MinecraftServer_getScriptServer(entity.level().getServer());
if (scriptServer.stopAll) if (scriptServer.stopAll)
{ {
return; // executed after world is closin down return; // executed after world is closin down
@@ -64,7 +64,7 @@ public class EntityEventsGroup
iterator.remove(); iterator.remove();
continue; 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(); iterator.remove();
continue; continue;
@@ -170,7 +170,7 @@ public class EntityEventsGroup
public CarpetEventServer.CallbackResult call(CarpetEventServer.Callback tickCall, Entity entity, Object... args) public CarpetEventServer.CallbackResult call(CarpetEventServer.Callback tickCall, Entity entity, Object... args)
{ {
assert args.length == argcount - 1; 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<Value> makeArgs(Entity entity, Object... args) protected List<Value> makeArgs(Entity entity, Object... args)
@@ -212,7 +212,7 @@ public interface Param
registerStrictConverter(Component.class, false, new SimpleTypeConverter<>(FormattedTextValue.class, FormattedTextValue::getText, "text")); registerStrictConverter(Component.class, false, new SimpleTypeConverter<>(FormattedTextValue.class, FormattedTextValue::getText, "text"));
registerStrictConverter(Component.class, true, new SimpleTypeConverter<>(StringValue.class, FormattedTextValue::getTextByValue, "text")); registerStrictConverter(Component.class, true, new SimpleTypeConverter<>(StringValue.class, FormattedTextValue::getTextByValue, "text"));
registerStrictConverter(ServerPlayer.class, false, new SimpleTypeConverter<>(EntityValue.class, 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, false, new SimpleTypeConverter<>(BooleanValue.class, BooleanValue::getBoolean, "boolean"));
registerStrictConverter(Boolean.class, true, new SimpleTypeConverter<>(NumericValue.class, NumericValue::getBoolean, "boolean")); registerStrictConverter(Boolean.class, true, new SimpleTypeConverter<>(NumericValue.class, NumericValue::getBoolean, "boolean"));
} }
@@ -762,7 +762,7 @@ public class ShapeDispatcher
{ {
return p -> { return p -> {
ParticleOptions particle; ParticleOptions particle;
Registry<Block> blocks = p.getServer().registryAccess().lookupOrThrow(Registries.BLOCK); Registry<Block> blocks = p.level().getServer().registryAccess().lookupOrThrow(Registries.BLOCK);
if (this.isitem) if (this.isitem)
{ {
if (Block.byItem(this.item.getItem()).defaultBlockState().isAir()) if (Block.byItem(this.item.getItem()).defaultBlockState().isAir())
@@ -33,6 +33,7 @@ import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; 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.entity.state.EntityRenderState;
import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.item.ItemStackRenderState;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
@@ -438,11 +439,17 @@ public class ShapesRenderer
} }
if (BlockEntity != null) if (BlockEntity != null)
{ {
BlockEntityRenderer<BlockEntity> blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity); BlockEntityRenderer<BlockEntity, BlockEntityRenderState> blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity);
if (blockEntityRenderer != null) BlockEntityRenderState state = client.getBlockEntityRenderDispatcher().tryExtractRenderState(BlockEntity, partialTick, null);
if (blockEntityRenderer != null && state != null)
{ {
blockEntityRenderer.submit(BlockEntity, partialTick, // testme partial positions
matrices, light, OverlayTexture.NO_OVERLAY, camera1.getPosition(), null, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage()); blockEntityRenderer.submit(state, matrices,client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage());
//blockEntityRenderer.submit(BlockEntity, partialTick,
// matrices, light, OverlayTexture.NO_OVERLAY, camera1.getPosition(), null, client.gameRenderer.getFeatureRenderDispatcher().getSubmitNodeStorage());
} }
} }
@@ -70,12 +70,12 @@ public class SnoopyCommandSource extends CommandSourceStack
{ {
super(player.commandSource(), player.position(), player.getRotationVector(), super(player.commandSource(), player.position(), player.getRotationVector(),
player.level() instanceof final ServerLevel serverLevel ? serverLevel : null, 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); player.level().getServer(), player);
this.output = player.commandSource(); this.output = player.commandSource();
this.position = player.position(); this.position = player.position();
this.world = player.level() instanceof final ServerLevel serverLevel ? serverLevel : null; 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.simpleName = player.getName().getString();
this.name = player.getDisplayName(); this.name = player.getDisplayName();
this.server = player.level().getServer(); this.server = player.level().getServer();
@@ -86,7 +86,7 @@ public class SnoopyCommandSource extends CommandSourceStack
this.error = error; this.error = error;
this.chatOutput = output; this.chatOutput = output;
this.signingContext = CommandSigningContext.ANONYMOUS; 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, 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,
@@ -134,7 +134,7 @@ public class EntityValue extends Value
{ {
if (entity instanceof ServerPlayer serverPlayer && Vanilla.ServerPlayer_isInvalidEntityObject(serverPlayer)) 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) if (newPlayer != null)
{ {
entity = newPlayer; 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("scoreboard_tags", (e, a) -> ListValue.wrap(e.getTags().stream().map(StringValue::new)));
put("entity_tags", (e, a) -> { put("entity_tags", (e, a) -> {
EntityType<?> type = e.getType(); 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 // deprecated
put("has_tag", (e, a) -> BooleanValue.of(e.getTags().contains(a.getString()))); 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_scoreboard_tag", (e, a) -> BooleanValue.of(e.getTags().contains(a.getString())));
put("has_entity_tag", (e, a) -> { put("has_entity_tag", (e, a) -> {
Optional<HolderSet.Named<EntityType<?>>> tag = e.getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).get(TagKey.create(Registries.ENTITY_TYPE, InputValidator.identifierOf(a.getString()))); Optional<HolderSet.Named<EntityType<?>>> tag = e.level().getServer().registryAccess().lookupOrThrow(Registries.ENTITY_TYPE).get(TagKey.create(Registries.ENTITY_TYPE, InputValidator.identifierOf(a.getString())));
if (tag.isEmpty()) if (tag.isEmpty())
{ {
return Value.NULL; 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("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("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("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("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("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))); 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) 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; return Value.NULL;
}); });
@@ -1376,7 +1376,7 @@ public class EntityValue extends Value
if (params.size() > blockLocator.offset) if (params.size() > blockLocator.offset)
{ {
Value worldValue = params.get(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) if (params.size() > blockLocator.offset + 1)
{ {
angle = NumericValue.asNumber(params.get(blockLocator.offset + 1), "angle").getFloat(); angle = NumericValue.asNumber(params.get(blockLocator.offset + 1), "angle").getFloat();
@@ -200,7 +200,7 @@ public class ScreenValue extends Value
this.screenHandler = null; this.screenHandler = null;
return false; return false;
} }
int runPermissionLevel = Vanilla.MinecraftServer_getRunPermissionLevel(player.getServer()); int runPermissionLevel = Vanilla.MinecraftServer_getRunPermissionLevel(player.level().getServer());
CommandSourceStack source = player.createCommandSourceStack().withPermission(runPermissionLevel); CommandSourceStack source = player.createCommandSourceStack().withPermission(runPermissionLevel);
CarpetScriptHost executingHost = appHost.retrieveForExecution(source, player); CarpetScriptHost executingHost = appHost.retrieveForExecution(source, player);
try try
@@ -89,7 +89,7 @@ public class ValueConversions
return ListValue.of(StringValue.of(Colors.mapColourName.get(color)), ofRGB(color.col)); return ListValue.of(StringValue.of(Colors.mapColourName.get(color)), ofRGB(color.col));
} }
public static <T extends Number> Value of(MinMaxBounds<T> range) public static <T extends Number & Comparable<T>> Value of(MinMaxBounds<T> range)
{ {
return ListValue.of( return ListValue.of(
range.min().map(NumericValue::of).orElse(Value.NULL), range.min().map(NumericValue::of).orElse(Value.NULL),
+1 -1
View File
@@ -109,7 +109,7 @@ public class WoolTool
DyeColor under = getWoolColorAtPosition(worldIn, pos.below()); DyeColor under = getWoolColorAtPosition(worldIn, pos.below());
if (under == null) return; if (under == null) return;
HopperCounter counter = HopperCounter.getCounter(under); HopperCounter counter = HopperCounter.getCounter(under);
counter.reset(placer.getServer()); counter.reset(placer.level().getServer());
List<Component> res = new ArrayList<>(); List<Component> res = new ArrayList<>();
res.add(Messenger.s(String.format("%s counter reset",under.toString()))); res.add(Messenger.s(String.format("%s counter reset",under.toString())));
Messenger.send(placer, res); Messenger.send(placer, res);
+2
View File
@@ -78,6 +78,7 @@
"ServerGamePacketListenerImpl_scarpetEventsMixin", "ServerGamePacketListenerImpl_scarpetEventsMixin",
"ServerPlayerGameMode_scarpetEventsMixin", "ServerPlayerGameMode_scarpetEventsMixin",
"Player_parrotMixin", "Player_parrotMixin",
"ServerPlayer_parrotMixin",
"SaplingBlock_desertShrubsMixin", "SaplingBlock_desertShrubsMixin",
"EntityMixin", "EntityMixin",
"Guardian_renewableSpongesMixin", "Guardian_renewableSpongesMixin",
@@ -189,6 +190,7 @@
"Gui_tablistMixin", "Gui_tablistMixin",
"PlayerTabOverlayMixin", "PlayerTabOverlayMixin",
"PistonHeadRenderer_movableBEMixin", "PistonHeadRenderer_movableBEMixin",
"PistonHeadRenderState_movableBEMixin",
"StructureBlockRenderer_mixin", "StructureBlockRenderer_mixin",
"ClientPacketListener_clientCommandMixin", "ClientPacketListener_clientCommandMixin",
"ClientPacketListener_explosionMixin", "ClientPacketListener_explosionMixin",