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
# 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
+1 -1
View File
@@ -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);
}
+1 -1
View File
@@ -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);
}
}
@@ -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;
}
}
@@ -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.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> 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
@@ -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();
}
@@ -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);
}
}
@@ -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;
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<PistonMovingBlockEntity>
public abstract class PistonHeadRenderer_movableBEMixin implements BlockEntityRenderer<PistonMovingBlockEntity, PistonHeadRenderState>
{
BlockEntityRenderDispatcher dispatcher;
@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",
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);
}
}
}
}
@@ -32,7 +32,7 @@ public abstract class Player_antiCheatDisabledMixin extends LivingEntity
@Inject(method = "tryToStartFallFlying", at = @At("HEAD"), cancellable = true)
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);
if (itemStack_1.getItem() == Items.ELYTRA && !itemStack_1.nextDamageWillBreak()) {
@@ -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<? 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",
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<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();
}
if (!CarpetSettings.persistentParrots) {
removeEntitiesOnShoulder();
}
}
}
@@ -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());
}
@@ -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 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<StructureBlockEntity>
public abstract class StructureBlockRenderer_mixin implements BlockEntityRenderer<StructureBlockEntity, BlockEntityWithBoundingBoxRenderState>
{
@Inject(method = "getViewDistance", at = @At("HEAD"), cancellable = true)
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);
}
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<Component> 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());
}
}
@@ -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);
@@ -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);
}
}
@@ -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()))
);
}
}))
@@ -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<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, 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"));
}
@@ -762,7 +762,7 @@ public class ShapeDispatcher
{
return p -> {
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 (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.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<BlockEntity> blockEntityRenderer = client.getBlockEntityRenderDispatcher().getRenderer(BlockEntity);
if (blockEntityRenderer != null)
BlockEntityRenderer<BlockEntity, BlockEntityRenderState> 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());
}
}
@@ -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,
@@ -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<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())
{
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();
@@ -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
@@ -89,7 +89,7 @@ public class ValueConversions
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(
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());
if (under == null) return;
HopperCounter counter = HopperCounter.getCounter(under);
counter.reset(placer.getServer());
counter.reset(placer.level().getServer());
List<Component> res = new ArrayList<>();
res.add(Messenger.s(String.format("%s counter reset",under.toString())));
Messenger.send(placer, res);
+2
View File
@@ -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",