From ae12aea3548959bcb83357dca393a132057e4a2b Mon Sep 17 00:00:00 2001 From: 1024_byteeeee <2270484921@qq.com> Date: Wed, 24 Apr 2024 03:35:39 +0800 Subject: [PATCH] =?UTF-8?q?:white=5Fcheck=5Fmark:=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../club/mcams/carpet/AmsServerSettings.java | 20 +++- .../PlayerDeathLocationContext.java | 95 +++++++++++++++++++ .../EntityInvoker.java | 34 +++++++ .../LivingEntityMixin.java | 51 ++++++++++ .../ServerPlayerEntityInvoker.java | 37 ++++++++ .../ServerPlayerEntityMixin.java | 59 ++++++++++++ src/main/resources/amscarpet.mixins.json | 6 +- .../assets/carpetamsaddition/lang/en_us.yml | 22 ++++- .../assets/carpetamsaddition/lang/zh_cn.yml | 27 +++++- 9 files changed, 337 insertions(+), 14 deletions(-) create mode 100644 src/main/java/club/mcams/carpet/helpers/rule/sendPlayerDeathLocation/PlayerDeathLocationContext.java create mode 100644 src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/EntityInvoker.java create mode 100644 src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/LivingEntityMixin.java create mode 100644 src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityInvoker.java create mode 100644 src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityMixin.java diff --git a/src/main/java/club/mcams/carpet/AmsServerSettings.java b/src/main/java/club/mcams/carpet/AmsServerSettings.java index c1f5504f..3773380c 100644 --- a/src/main/java/club/mcams/carpet/AmsServerSettings.java +++ b/src/main/java/club/mcams/carpet/AmsServerSettings.java @@ -346,7 +346,7 @@ public class AmsServerSettings { public static boolean carpetAlwaysSetDefault = false; //#if MC>=11900 - @GameVersion(version = "Minecraft >= 1.19") + //$$ @GameVersion(version = "Minecraft >= 1.19") //$$ @Rule(categories = {AMS, EXPERIMENTAL}) //$$ public static boolean experimentalContentCheckDisabled = false; //#endif @@ -355,7 +355,7 @@ public class AmsServerSettings { public static boolean fertilizableSmallFlower = false; @Rule(categories = {AMS, FEATURE, SURVIVAL}) - public static boolean harmlessPointedDripstone = false; + public static boolean safePointedDripstone = false; //#if MC>=11700 @GameVersion(version = "Minecraft >= 1.17") @@ -376,7 +376,7 @@ public class AmsServerSettings { public static boolean ironGolemNoDropFlower = false; //#if MC>=12000 - @GameVersion(version = "Minecraft >= 1.20") + //$$ @GameVersion(version = "Minecraft >= 1.20") //$$ @Rule( //$$ options = {"0"}, //$$ categories = {AMS, FEATURE, SURVIVAL}, @@ -392,6 +392,18 @@ public class AmsServerSettings { ) public static String commandGoto = "false"; + @Rule( + options = {"false", "all", "realPlayerOnly", "fakePlayerOnly"}, + categories = {AMS, SURVIVAL} + ) + public static String sendPlayerDeathLocation = "false"; + + @Rule(categories = {AMS, FEATURE, SURVIVAL}) + public static boolean perfectInvisibility = false; + + @Rule(categories = {AMS, FEATURE, SURVIVAL}) + public static boolean sneakInvisibility = false; + /* * 区块加载规则 */ @@ -483,7 +495,7 @@ public class AmsServerSettings { //#endif //#if MC>=12003 - @GameVersion(version = "Minecraft 1.20.3 - 1.20.5") + //$$ @GameVersion(version = "Minecraft 1.20.3 - 1.20.5") //$$ @SuppressWarnings("unused") //$$ @CraftingRule( //$$ recipes = { diff --git a/src/main/java/club/mcams/carpet/helpers/rule/sendPlayerDeathLocation/PlayerDeathLocationContext.java b/src/main/java/club/mcams/carpet/helpers/rule/sendPlayerDeathLocation/PlayerDeathLocationContext.java new file mode 100644 index 00000000..7cbcae0b --- /dev/null +++ b/src/main/java/club/mcams/carpet/helpers/rule/sendPlayerDeathLocation/PlayerDeathLocationContext.java @@ -0,0 +1,95 @@ +/* + * This file is part of the Carpet AMS Addition project, licensed under the + * GNU Lesser General Public License v3.0 + * + * Copyright (C) 2024 A Minecraft Server and contributors + * + * Carpet AMS Addition is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Carpet AMS Addition is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Carpet AMS Addition. If not, see . + */ + +package club.mcams.carpet.helpers.rule.sendPlayerDeathLocation; + +import club.mcams.carpet.helpers.FakePlayerHelper; +import club.mcams.carpet.translations.Translator; +import club.mcams.carpet.utils.MessageTextEventUtils.ClickEventUtil; +import club.mcams.carpet.utils.MessageTextEventUtils.HoverEventUtil; +import club.mcams.carpet.utils.Messenger; +import club.mcams.carpet.utils.compat.DimensionWrapper; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.BaseText; +import net.minecraft.text.Style; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.world.World; + +public class PlayerDeathLocationContext { + private static final Translator translator = new Translator("rule.sendPlayerDeathLocation"); + + public static void sendMessage(MinecraftServer server, ServerPlayerEntity player, World world) { + final Text copyButton = copyButton(player); + String message = formatMessage(player, world); + Messenger.sendServerMessage(server, Messenger.s(message).formatted(Formatting.RED).append(copyButton)); + } + + public static void realPlayerSendMessage(MinecraftServer server, ServerPlayerEntity player, World world) { + if (!FakePlayerHelper.isFakePlayer(player)) { + sendMessage(server, player, world); + } + } + + public static void fakePlayerSendMessage(MinecraftServer server, ServerPlayerEntity player, World world) { + if (FakePlayerHelper.isFakePlayer(player)) { + sendMessage(server, player, world); + } + } + + private static String getPlayerName(ServerPlayerEntity player) { + return player.getName().getString(); + } + + private static DimensionWrapper getDimension(World world) { + return DimensionWrapper.of(world); + } + + private static String getPlayerPos(ServerPlayerEntity player) { + return player.getBlockPos().getX() + ", " + player.getBlockPos().getY() + ", " + player.getBlockPos().getZ(); + } + + private static Text copyButton(ServerPlayerEntity player) { + BaseText hoverText = Messenger.s(translator.tr("copy").getString(), "y"); + String copyCoordText = getPlayerPos(player).replace(",", ""); // 1, 0, -24 -> 1 0 -24 + + return + Messenger.s(" [C] ").setStyle( + Style.EMPTY.withColor(Formatting.GREEN).withBold(true). + withClickEvent(ClickEventUtil.event(ClickEventUtil.COPY_TO_CLIPBOARD, copyCoordText)). + withHoverEvent(HoverEventUtil.event(HoverEventUtil.SHOW_TEXT, hoverText)) + ); + } + + // Alex 死亡位置 @ minecraft:overworld -> [ 888, 20, 999 ] + private static String formatMessage(ServerPlayerEntity player, World world) { + String playerName = getPlayerName(player); + DimensionWrapper dimension = getDimension(world); + return String.format( + "%s %s @ %s -> [ %s ]", + playerName, + translator.tr("location").getString(), + dimension, + getPlayerPos(player) + ); + } +} diff --git a/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/EntityInvoker.java b/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/EntityInvoker.java new file mode 100644 index 00000000..c714b37c --- /dev/null +++ b/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/EntityInvoker.java @@ -0,0 +1,34 @@ +/* + * This file is part of the Carpet AMS Addition project, licensed under the + * GNU Lesser General Public License v3.0 + * + * Copyright (C) 2024 A Minecraft Server and contributors + * + * Carpet AMS Addition is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Carpet AMS Addition is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Carpet AMS Addition. If not, see . + */ + +package club.mcams.carpet.mixin.rule.perfectInvisibility_sneakInvisibility; + +import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Entity.class) +public interface EntityInvoker { + @Invoker("isInvisible") + boolean invokeIsInvisible(); + + @Invoker("isSneaky") + boolean invokeIsSneaky(); +} diff --git a/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/LivingEntityMixin.java b/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/LivingEntityMixin.java new file mode 100644 index 00000000..c0631445 --- /dev/null +++ b/src/main/java/club/mcams/carpet/mixin/rule/perfectInvisibility_sneakInvisibility/LivingEntityMixin.java @@ -0,0 +1,51 @@ +/* + * This file is part of the Carpet AMS Addition project, licensed under the + * GNU Lesser General Public License v3.0 + * + * Copyright (C) 2024 A Minecraft Server and contributors + * + * Carpet AMS Addition is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Carpet AMS Addition is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Carpet AMS Addition. If not, see . + */ + +package club.mcams.carpet.mixin.rule.perfectInvisibility_sneakInvisibility; + +import club.mcams.carpet.AmsServerSettings; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; + +import net.minecraft.entity.LivingEntity; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(LivingEntity.class) +public abstract class LivingEntityMixin implements EntityInvoker { + @ModifyReturnValue(method = "getAttackDistanceScalingFactor", at = @At("RETURN")) + private double modifyAttackDistanceScalingFactor(double original) { + if (AmsServerSettings.perfectInvisibility && this.invokeIsInvisible()) { + return 0.0D; + } else { + return original; + } + } + + @ModifyReturnValue(method = "getAttackDistanceScalingFactor", at = @At("RETURN")) + private double sneakInvisibility(double original) { + if (AmsServerSettings.sneakInvisibility && this.invokeIsSneaky()) { + return 0.0D; + } else { + return original; + } + } +} diff --git a/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityInvoker.java b/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityInvoker.java new file mode 100644 index 00000000..6a9dd3c4 --- /dev/null +++ b/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityInvoker.java @@ -0,0 +1,37 @@ +/* + * This file is part of the Carpet AMS Addition project, licensed under the + * GNU Lesser General Public License v3.0 + * + * Copyright (C) 2024 A Minecraft Server and contributors + * + * Carpet AMS Addition is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Carpet AMS Addition is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Carpet AMS Addition. If not, see . + */ + +package club.mcams.carpet.mixin.rule.sendPlayerDeathLocation; + +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(ServerPlayerEntity.class) +public interface ServerPlayerEntityInvoker { + //#if MC>=12000 + //$$ @Invoker("getServerWorld") + //#else + @Invoker("getWorld") + //#endif + ServerWorld invokeGetWorld(); +} diff --git a/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityMixin.java b/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityMixin.java new file mode 100644 index 00000000..ac713a72 --- /dev/null +++ b/src/main/java/club/mcams/carpet/mixin/rule/sendPlayerDeathLocation/ServerPlayerEntityMixin.java @@ -0,0 +1,59 @@ +/* + * This file is part of the Carpet AMS Addition project, licensed under the + * GNU Lesser General Public License v3.0 + * + * Copyright (C) 2024 A Minecraft Server and contributors + * + * Carpet AMS Addition is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Carpet AMS Addition is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Carpet AMS Addition. If not, see . + */ + +package club.mcams.carpet.mixin.rule.sendPlayerDeathLocation; + +import club.mcams.carpet.AmsServer; +import club.mcams.carpet.AmsServerSettings; +import club.mcams.carpet.helpers.rule.sendPlayerDeathLocation.PlayerDeathLocationContext; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.World; + +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 java.util.Objects; + +@Mixin(ServerPlayerEntity.class) +public abstract class ServerPlayerEntityMixin implements ServerPlayerEntityInvoker { + @Inject(method = "onDeath", at = @At("TAIL")) + private void sendDeathLocation(CallbackInfo ci) { + if (!Objects.equals(AmsServerSettings.sendPlayerDeathLocation, "false")) { + MinecraftServer server = AmsServer.minecraftServer; + ServerPlayerEntity player = (ServerPlayerEntity) (Object) this; + World world = this.invokeGetWorld(); + switch (AmsServerSettings.sendPlayerDeathLocation) { + case "all": + PlayerDeathLocationContext.sendMessage(server, player, world); + break; + case "realPlayerOnly": + PlayerDeathLocationContext.realPlayerSendMessage(server, player, world); + break; + case "fakePlayerOnly": + PlayerDeathLocationContext.fakePlayerSendMessage(server, player, world); + break; + } + } + } +} diff --git a/src/main/resources/amscarpet.mixins.json b/src/main/resources/amscarpet.mixins.json index cc2accfd..2c6ea404 100644 --- a/src/main/resources/amscarpet.mixins.json +++ b/src/main/resources/amscarpet.mixins.json @@ -54,7 +54,7 @@ "rule.foliageGenerateDisabled.FoliagePlacerMixin", "rule.foliageGenerateDisabled.HugeFungusFeatureMixin", "rule.ghastFireballExplosionDamageSourceFix.FireballEntityMixin", - "rule.harmlessPointedDripstone.PointedDripstoneBlockMixin", + "rule.safePointedDripstone.PointedDripstoneBlockMixin", "rule.hopperSuctionDisabled.HopperBlockEntityMixin", "rule.infiniteDurability.ItemStackMixin", "rule.infiniteTrades.TradeOfferMixin", @@ -79,6 +79,8 @@ "rule.noFamilyPlanning.PassiveEntityMixin", "rule.optimizedDragonRespawn.BlockPatternTestTransformInvoker", "rule.optimizedDragonRespawn.EnderDragonFightMixin", + "rule.perfectInvisibility_sneakInvisibility.EntityInvoker", + "rule.perfectInvisibility_sneakInvisibility.LivingEntityMixin", "rule.playerNoNetherPortalCrossing.NetherPortalBlockMixin", "rule.pointedDripstoneCollisionBoxDisabled.AbstractBlockStateMixin", "rule.preventAdministratorCheat.AdvancementCommandMixin", @@ -108,6 +110,8 @@ "rule.scheduledRandomTick.CactusBlockMixin", "rule.scheduledRandomTick.ChorusFlowerBlockMixin", "rule.scheduledRandomTick.SugarCaneBlockMixin", + "rule.sendPlayerDeathLocation.ServerPlayerEntityInvoker", + "rule.sendPlayerDeathLocation.ServerPlayerEntityMixin", "rule.sensibleEnderman_endermanPickUpDisabled.PickUpBlockGoalMixin", "rule.sharedVillagerDiscounts.GetValueForInvoker", "rule.sharedVillagerDiscounts.VillagerGossipsMixin", diff --git a/src/main/resources/assets/carpetamsaddition/lang/en_us.yml b/src/main/resources/assets/carpetamsaddition/lang/en_us.yml index 8fafcb69..76eae801 100644 --- a/src/main/resources/assets/carpetamsaddition/lang/en_us.yml +++ b/src/main/resources/assets/carpetamsaddition/lang/en_us.yml @@ -15,6 +15,9 @@ carpetamsaddition: disable_command: 'This change will not take effect because the maxPlayerBlockInteractionRange rule is enabled' maxPlayerEntityInteractionRange: disable_command: 'This change will not take effect because the maxPlayerBlockInteractionRange rule is enabled' + sendPlayerDeathLocation: + location: 'death location' + copy: 'copy coord to clipboard' command: amsUpdateSuppressionCrashFixForceMode: @@ -307,8 +310,8 @@ carpetamsaddition: desc: Allow playing Minecraft experimental content in the game by adding data packs fertilizableSmallFlower: desc: Allow small flowers such as dandelion can also be ripened by bone meal - harmlessPointedDripstone: - desc: Let pointed dripstone do no damage + safePointedDripstone: + desc: When players land on pointed dripstone, they do not take additional damage from it pointedDripstoneCollisionBoxDisabled: desc: Allow players to pass through pointed dripstone foliageGenerateDisabled: @@ -325,6 +328,17 @@ carpetamsaddition: desc: Use the "/goto" command to teleport to the specified dimension and coordinates extra: '0': 'When no coordinates are specified, it will teleport to the corresponding coordinates of the current player location' + sendPlayerDeathLocation: + desc: When a player dies, a message with their death coordinates and dimension will be broadcasted + extra: + '0': '[false] - Disable rule' + '1': '[all] - Always send messages' + '2': '[realPlayerOnly] - Messages will only be sent when real players die' + '3': '[fakePlayerOnly] - Messages will only be sent when fake players die' + perfectInvisibility: + desc: When the player is invisible, they will be completely hidden from mobs, even when wearing a full set of armor + sneakInvisibility: + desc: When the player is sneak, they will be completely hidden from mobs, even when wearing a full set of armor # 计划刻催熟规则: scheduledRandomTickCactus: @@ -352,7 +366,7 @@ carpetamsaddition: '0': '[bone_block] - When bone_block is on the note_block' '1': '[wither_skeleton_skull] - When wither_skeleton_skull is on the note_block, either placed on the note block or hanging on the wall' '2': '[note_block] - Only note_block' - '3': '[OFF] - Disable the rule' + '3': '[false] - Disable rule' '4': 'Due to after 300 ticks without any players in the current dimension on the server, Minecraft will stop entities updates, hoppers in chunks loaded by this rule will cease to function whenever there are no players in the current dimension.' '5': 'You can enable the blockChunkLoaderKeepWorldTickUpdate or keepWorldTickUpdate rules to solve this issue.' bellBlockChunkLoader: @@ -366,7 +380,7 @@ carpetamsaddition: '0': '[bone_block] - When bone_block is on the piston' '1': '[bedrock] - When bedrock is under the piston' '2': '[all] - When bone_block is on the piston or bedrock is under the piston' - '3': '[OFF] - Disable the rule' + '3': '[false] - Disable rule' '4': 'Due to after 300 ticks without any players in the current dimension on the server, Minecraft will stop entities updates, hoppers in chunks loaded by this rule will cease to function whenever there are no players in the current dimension.' '5': 'You can enable the blockChunkLoaderKeepWorldTickUpdate or keepWorldTickUpdate rules to solve this issue.' blockChunkLoaderKeepWorldTickUpdate: diff --git a/src/main/resources/assets/carpetamsaddition/lang/zh_cn.yml b/src/main/resources/assets/carpetamsaddition/lang/zh_cn.yml index 5f3e8f6e..a8eec56a 100644 --- a/src/main/resources/assets/carpetamsaddition/lang/zh_cn.yml +++ b/src/main/resources/assets/carpetamsaddition/lang/zh_cn.yml @@ -15,6 +15,9 @@ carpetamsaddition: disable_command: '由于已开启maxPlayerBlockInteractionRange规则,该改动不会生效' maxPlayerEntityInteractionRange: disable_command: '由于已开启maxPlayerEntityInteractionRange规则,该改动不会生效' + sendPlayerDeathLocation: + location: '死亡位置' + copy: '复制坐标到剪切板' command: amsUpdateSuppressionCrashFixForceMode: @@ -381,9 +384,9 @@ carpetamsaddition: fertilizableSmallFlower: name: 可施肥小花 desc: 使诸如蒲公英的小花也可以被骨粉催熟 - harmlessPointedDripstone: - name: 无害化滴水石锥 - desc: 让滴水石锥不会产生伤害 + safePointedDripstone: + name: 安全的滴水石锥 + desc: 玩家落在滴水石锥上时,不会受到它的附加伤害 pointedDripstoneCollisionBoxDisabled: name: 禁用滴水石锥碰撞箱 desc: 允许玩家穿过滴水石锥 @@ -406,6 +409,20 @@ carpetamsaddition: desc: 使用 /goto 命令快速传送到指定维度的指定坐标 extra: '0': '没有指定坐标时会传送至当前玩家所在位置的对应坐标' + sendPlayerDeathLocation: + name: 发送玩家死亡位置 + desc: 当玩家死亡时,会广播一条包含该玩家死亡坐标以及维度的消息 + extra: + '0': '[false] - 禁用规则' + '1': '[all] - 总是发送消息' + '2': '[realPlayerOnly] - 只有真实玩家死亡时发送消息' + '3': '[fakePlayerOnly] - 只有假人死亡时发送消息' + perfectInvisibility: + name: 完美隐身 + desc: 当玩家拥有隐身效果时将完全隐身,即使穿着全套盔甲 + sneakInvisibility: + name: 潜行隐身 + desc: 当玩家潜行时将对生物完全隐身,即使穿着全套盔甲 # 计划刻催熟规则: scheduledRandomTickCactus: @@ -441,7 +458,7 @@ carpetamsaddition: '0': '[bone_block] - 音符盒上方有骨块可以触发加载' '1': '[wither_skeleton_skull] - 音符盒上有凋灵骷髅头(可以是挂在墙上的也可以是放在音符盒上的)时可以触发加载' '2': '[note_block] - 无需条件,只有音符盒即可加载' - '3': '[OFF] - 禁用该规则' + '3': '[false] - 禁用该规则' '4': '由于在服务器当前维度没有玩家的300tick后,Minecraft会停止实体相关的更新,因此每当当前维度中没有玩家时使用该规则加载的区块中漏斗将会停止工作' '5': '你可以启用blockChunkLoaderKeepWorldTickUpdate或keepWorldTickUpdate规则来解决这个问题' bellBlockChunkLoader: @@ -457,7 +474,7 @@ carpetamsaddition: '0': '[bone_block] - 当活塞/黏性活塞上方有骨块时' '1': '[bedrock] - 当活塞/黏性活塞下方有基岩时' '2': '[all] - 当活塞/黏性活塞上方有骨块或下方有基岩时' - '3': '[OFF] - 禁用该规则' + '3': '[false] - 禁用该规则' '4': '由于在服务器当前维度没有玩家的300tick后,Minecraft会停止实体相关的更新,因此每当当前维度中没有玩家时使用该规则加载的区块中漏斗将会停止工作' '5': '你可以启用blockChunkLoaderKeepWorldTickUpdate或keepWorldTickUpdate规则来解决这个问题' blockChunkLoaderKeepWorldTickUpdate: