From 7901aa7ccafda265f82e26a9da2e9b09f3c353a6 Mon Sep 17 00:00:00 2001 From: De6ris <2838369930@qq.com> Date: Mon, 3 Feb 2025 20:31:56 +0800 Subject: [PATCH 1/2] update dependency --- build.gradle | 4 ++-- gradle.properties | 10 +++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/resources/fabric.mod.json | 3 +-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index f083445..88420d5 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id "fabric-loom" version "1.8.9" apply false + id "fabric-loom" version "1.9-SNAPSHOT" apply false id "maven-publish" id "org.ajoberstar.grgit" version "5.2.2" id "org.jetbrains.kotlin.jvm" version "2.0.0" @@ -101,7 +101,7 @@ dependencies { include(modImplementation("org.yaml:snakeyaml:1.33")) // Fabric Permissions API. To check the permissions - include(modImplementation('me.lucko:fabric-permissions-api:0.2-SNAPSHOT')) + include(modImplementation('me.lucko:fabric-permissions-api:0.3.3')) // REI. To avoid the REI GUI overlap with the Enclosure GUI modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" diff --git a/gradle.properties b/gradle.properties index 5e7d758..11326bf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,12 +8,12 @@ archices_preview_version= maven_group=com.github.zly2006 archives_base_name=enclosure-fabric # Dependencies -rei_version = 9.1.550 +rei_version = 9.2.784 # check these on https://fabricmc.net/develop -minecraft_version=1.21.1 -yarn_mappings=1.21.1+build.3 -loader_version=0.16.7 +minecraft_version=1.21.4 +yarn_mappings=1.21.4+build.8 +loader_version=0.16.10 # Fabric API -fabric_version=0.106.0+1.21.1 +fabric_version=0.115.1+1.21.4 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5c40527..4eaec46 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index a2a3828..576fad0 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -47,8 +47,7 @@ "fabricloader": ">=0.13.0", "fabric-api": ">=0.100", "minecraft": [ - "1.21", - "1.21.1" + "1.21.4" ], "fabric-language-kotlin": "*", "java": ">=17" From 105f5fa6b06240e1a0d462abe25f7c86fb9699e5 Mon Sep 17 00:00:00 2001 From: De6ris <2838369930@qq.com> Date: Mon, 3 Feb 2025 22:58:47 +0800 Subject: [PATCH 2/2] make run on 1.21.4 --- .../enclosure/client/mixin/MixinClient.java | 7 ++- .../client/mixin/MixinServerEntry.java | 3 +- .../client/mixin/MixinWorldRenderer.java | 57 +++++++++---------- .../zly2006/enclosure/gui/ConfirmScreen.java | 5 +- .../enclosure/gui/PermissionListWidget.java | 7 ++- .../gui/PermissionTargetListWidget.java | 4 +- .../mixin/MixinAbstractSignBlock.java | 2 +- .../enclosure/mixin/MixinAnimalEntity.java | 2 +- .../mixin/MixinArmorStandEntity.java | 3 +- .../mixin/MixinBlockAttachedEntity.java | 3 +- .../enclosure/mixin/MixinBoatEntity.java | 5 +- .../zly2006/enclosure/mixin/MixinBowItem.java | 5 +- .../enclosure/mixin/MixinBucketItem.java | 6 +- .../enclosure/mixin/MixinChestBoatEntity.java | 17 ++++-- .../mixin/MixinChiseledBookshelfBlock.java | 9 ++- .../enclosure/mixin/MixinCreeperEntity.java | 2 +- .../enclosure/mixin/MixinCrossBowItem.java | 6 +- .../mixin/MixinEndCrystalEntity.java | 3 +- .../mixin/MixinEnderDragonEntity.java | 4 +- .../enclosure/mixin/MixinExplosion.java | 30 +++++----- .../enclosure/mixin/MixinFarmlandBlock.java | 2 +- .../enclosure/mixin/MixinFlowableFluid.java | 8 +-- .../enclosure/mixin/MixinItemFrameEntity.java | 6 +- .../enclosure/mixin/MixinLeadItem.java | 2 +- .../enclosure/mixin/MixinLivingEntity.java | 3 +- .../enclosure/mixin/MixinMinecartEntity.java | 2 +- .../mixin/MixinServerPlayerEntity.java | 4 +- .../enclosure/mixin/MixinTadpoleEntity.java | 2 +- ...> MixinTeleportRandomlyConsumeEffect.java} | 12 ++-- .../enclosure/mixin/MixinTntBlock.java | 8 +-- .../mixin/MixinTntMinecartEntity.java | 3 +- .../enclosure/mixin/MixinVehicleEntity.java | 3 +- .../enclosure/mixin/MixinWitherEntity.java | 2 +- .../github/zly2006/enclosure/utils/Utils.java | 2 +- .../github/zly2006/enclosure/EnclosureArea.kt | 6 +- .../github/zly2006/enclosure/ServerMain.kt | 12 ++-- .../client/EnclosureWorldRenderer.kt | 7 ++- .../network/play/BackgroundMusicPayload.kt | 2 +- .../zly2006/enclosure/utils/Permission.kt | 4 +- .../github/zly2006/enclosure/utils/Utils.kt | 2 +- src/main/resources/enclosure.mixins.json | 2 +- 41 files changed, 147 insertions(+), 127 deletions(-) rename src/main/java/com/github/zly2006/enclosure/mixin/{MixinChorusFruitItem.java => MixinTeleportRandomlyConsumeEffect.java} (65%) diff --git a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinClient.java b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinClient.java index 7c318e0..cc77c82 100644 --- a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinClient.java +++ b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinClient.java @@ -2,6 +2,7 @@ import com.github.zly2006.enclosure.access.ClientAccess; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.sound.MusicInstance; import net.minecraft.sound.MusicSound; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -15,13 +16,13 @@ public class MixinClient implements ClientAccess { @Unique @Nullable MusicSound musicSound; @Inject( - method = "getMusicType", + method = "getMusicInstance", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;player:Lnet/minecraft/client/network/ClientPlayerEntity;", ordinal = 0), cancellable = true ) - private void modifyBgm(CallbackInfoReturnable cir) { + private void modifyBgm(CallbackInfoReturnable cir) { if (musicSound != null) { - cir.setReturnValue(musicSound); + cir.setReturnValue(new MusicInstance(musicSound)); } } diff --git a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinServerEntry.java b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinServerEntry.java index 81f90c0..39bf21c 100644 --- a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinServerEntry.java +++ b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinServerEntry.java @@ -7,6 +7,7 @@ import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.network.ServerInfo; +import net.minecraft.client.render.RenderLayer; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Final; @@ -36,7 +37,7 @@ private void onRender(DrawContext context, int index, int y, int x, int entryWid ); } } - context.drawTexture(NOTIFY_TEXTURE, x + 24, y + 24, 0, offset, 8, 8, 8, 16); + context.drawTexture(RenderLayer::getGuiTextured, NOTIFY_TEXTURE, x + 24, y + 24, 0, offset, 8, 8, 8, 16); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinWorldRenderer.java b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinWorldRenderer.java index 0c3defe..c6c239c 100644 --- a/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinWorldRenderer.java +++ b/src/main/java/com/github/zly2006/enclosure/client/mixin/MixinWorldRenderer.java @@ -21,30 +21,30 @@ public class MixinWorldRenderer { @Shadow @Final private MinecraftClient client; - @Inject( - method = "render", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;draw(Lnet/minecraft/client/render/RenderLayer;)V", - shift = At.Shift.AFTER - ), - slice = @Slice( - from = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/RenderLayer;getWaterMask()Lnet/minecraft/client/render/RenderLayer;", - ordinal = 0 - ), - to = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;draw()V", - ordinal = 0 - ) - ), - allow = 1 - ) - private void onLastRender1(CallbackInfo ci, @Local MatrixStack matrixStack, @Local Vec3d vec3d) { - render(matrixStack, vec3d); - } +// @Inject( +// method = "render", +// at = @At( +// value = "INVOKE", +// target = "Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;draw(Lnet/minecraft/client/render/RenderLayer;)V", +// shift = At.Shift.AFTER +// ), +// slice = @Slice( +// from = @At( +// value = "INVOKE", +// target = "Lnet/minecraft/client/render/RenderLayer;getWaterMask()Lnet/minecraft/client/render/RenderLayer;", +// ordinal = 0 +// ), +// to = @At( +// value = "INVOKE", +// target = "Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;draw()V", +// ordinal = 0 +// ) +// ), +// allow = 1 +// ) +// private void onLastRender1(CallbackInfo ci, @Local MatrixStack matrixStack, @Local Vec3d vec3d) { +// render(matrixStack, vec3d); +// }// TODO what's this @Unique private void render(@Local MatrixStack matrixStack, @Local Vec3d vec3d) { @@ -58,18 +58,15 @@ private void render(@Local MatrixStack matrixStack, @Local Vec3d vec3d) { RenderSystem.disableBlend(); } - @Inject( - method = "render", - at = @At( - value = "INVOKE", + @Inject(method = "method_62214", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderLayer(Lnet/minecraft/client/render/RenderLayer;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V", shift = At.Shift.AFTER ), slice = @Slice( from = @At( value = "INVOKE", - target = "Lnet/minecraft/client/render/RenderLayer;getTripwire()Lnet/minecraft/client/render/RenderLayer;", - ordinal = 1 + target = "Lnet/minecraft/client/render/RenderLayer;getTripwire()Lnet/minecraft/client/render/RenderLayer;" ), to = @At("TAIL") ), diff --git a/src/main/java/com/github/zly2006/enclosure/gui/ConfirmScreen.java b/src/main/java/com/github/zly2006/enclosure/gui/ConfirmScreen.java index f09a0be..d2f57d2 100644 --- a/src/main/java/com/github/zly2006/enclosure/gui/ConfirmScreen.java +++ b/src/main/java/com/github/zly2006/enclosure/gui/ConfirmScreen.java @@ -3,6 +3,7 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.render.RenderLayer; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -45,8 +46,8 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { int height = 150; int x = (parent.width - 200) / 2; int y = (parent.height - height) / 2; - context.drawTexture(TEXTURE, x, y, 0, 0, 200, 150, 200, 150); - context.drawTextWrapped(textRenderer, message, x + 10, y + 10, 180, 0xFFFFFF); + context.drawTexture(RenderLayer::getGuiTextured, TEXTURE, x, y, 0, 0, 200, 150, 200, 150); + context.drawWrappedText(textRenderer, message, x + 10, y + 10, 180, 0xFFFFFF, false); yesButton.setY(y + height - 30); noButton.setY(y + height - 30); yesButton.render(context, mouseX, mouseY, delta); diff --git a/src/main/java/com/github/zly2006/enclosure/gui/PermissionListWidget.java b/src/main/java/com/github/zly2006/enclosure/gui/PermissionListWidget.java index 1908efb..5a90ba5 100644 --- a/src/main/java/com/github/zly2006/enclosure/gui/PermissionListWidget.java +++ b/src/main/java/com/github/zly2006/enclosure/gui/PermissionListWidget.java @@ -206,7 +206,12 @@ public List children() { } @Override - protected boolean isSelectButton(int button) { + protected boolean isSelectedEntry(int index) { + return super.isSelectedEntry(index); + } + + @Override + public boolean isSelected() { return true; } } diff --git a/src/main/java/com/github/zly2006/enclosure/gui/PermissionTargetListWidget.java b/src/main/java/com/github/zly2006/enclosure/gui/PermissionTargetListWidget.java index ab4450a..555acab 100644 --- a/src/main/java/com/github/zly2006/enclosure/gui/PermissionTargetListWidget.java +++ b/src/main/java/com/github/zly2006/enclosure/gui/PermissionTargetListWidget.java @@ -55,7 +55,7 @@ public int getRowWidth() { public void showPlayers() { clearEntries(); mode = Mode.Players; - setScrollAmount(0); + setScrollY(0); addEntry(searchEntry); area.getPermissionsMap().keySet().stream() .filter(uuid -> !uuid.equals(CONSOLE)) @@ -67,7 +67,7 @@ public void showPlayers() { public void showUnlistedPlayers() { clearEntries(); mode = Mode.Unspecified; - setScrollAmount(0); + setScrollY(0); addEntry(searchEntry); ClientMain.uuid2name.keySet().stream() .filter(uuid -> !CONSOLE.equals(uuid)) diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinAbstractSignBlock.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinAbstractSignBlock.java index 05a3593..591b2c2 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinAbstractSignBlock.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinAbstractSignBlock.java @@ -21,7 +21,7 @@ private void openEditScreen(PlayerEntity player, SignBlockEntity blockEntity, bo @SuppressWarnings("DataFlowIssue") EnclosureArea area = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) blockEntity.getWorld(), blockEntity.getPos()); if (area != null && !area.hasPerm((ServerPlayerEntity) player, Permission.EDIT_SIGN)) { - player.sendMessage(Permission.EDIT_SIGN.getNoPermissionMsg(player)); + player.sendMessage(Permission.EDIT_SIGN.getNoPermissionMsg(player), false); ci.cancel(); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinAnimalEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinAnimalEntity.java index 05f3000..cb7a185 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinAnimalEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinAnimalEntity.java @@ -39,7 +39,7 @@ private void onEating(PlayerEntity player, Hand hand, CallbackInfoReturnable entityType, W } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), Permission.BREAK_BLOCK)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBlockAttachedEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBlockAttachedEntity.java index 9c929c8..406c70f 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBlockAttachedEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBlockAttachedEntity.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.BlockAttachedEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,7 +20,7 @@ public MixinBlockAttachedEntity(EntityType type, World world) { } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), Permission.BREAK_BLOCK)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBoatEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBoatEntity.java index 6be5109..f3828a3 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBoatEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBoatEntity.java @@ -4,6 +4,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.vehicle.AbstractBoatEntity; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -15,7 +16,7 @@ import static com.github.zly2006.enclosure.utils.Permission.VEHICLE; -@Mixin(BoatEntity.class) +@Mixin(AbstractBoatEntity.class) public abstract class MixinBoatEntity extends Entity { protected MixinBoatEntity(EntityType entityType, World world) { super(entityType, world); @@ -24,7 +25,7 @@ protected MixinBoatEntity(EntityType entityType, World world) { @Inject(method = "interact", at = @At("HEAD"), cancellable = true) private void onInteract(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { if (!ServerMain.INSTANCE.checkPermission(getWorld(), getBlockPos(), player, VEHICLE)) { - player.sendMessage(VEHICLE.getNoPermissionMsg(player)); + player.sendMessage(VEHICLE.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBowItem.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBowItem.java index df7fec3..d020ffe 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBowItem.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBowItem.java @@ -10,18 +10,19 @@ 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.CallbackInfoReturnable; import static com.github.zly2006.enclosure.utils.Permission.SHOOT; @Mixin(BowItem.class) public class MixinBowItem { @Inject(at = @At("HEAD"), method = "onStoppedUsing", cancellable = true) - public void checkBowPermission(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfo ci) { + public void checkBowPermission(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfoReturnable cir) { if (user instanceof ServerPlayerEntity player) { if (!ServerMain.INSTANCE.checkPermission(player, SHOOT, player.getBlockPos())) { player.sendMessage(SHOOT.getNoPermissionMsg(player)); player.currentScreenHandler.syncState(); // update player's inventory - ci.cancel(); + cir.setReturnValue(false); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBucketItem.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBucketItem.java index 239c3fe..1df4788 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinBucketItem.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinBucketItem.java @@ -8,8 +8,8 @@ import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -27,14 +27,14 @@ public class MixinBucketItem { @Shadow @Final private Fluid fluid; @Inject(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;canPlayerModifyAt(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/math/BlockPos;)Z"), locals = LocalCapture.CAPTURE_FAILSOFT, cancellable = true) - private void onUse(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir, ItemStack itemStack, BlockHitResult blockHitResult, BlockPos blockPos, Direction direction, BlockPos blockPos2) { + private void onUse(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir, ItemStack itemStack, BlockHitResult blockHitResult, BlockPos blockPos, Direction direction, BlockPos blockPos2) { if (user instanceof ServerPlayerEntity player) { Permission permission = this.fluid == Fluids.EMPTY ? Permission.BREAK_BLOCK : Permission.PLACE_BLOCK; if (!ServerMain.INSTANCE.checkPermission(world, blockPos, player, permission) || !ServerMain.INSTANCE.checkPermission(world, blockPos2, player, permission)) { player.currentScreenHandler.syncState(); player.sendMessage(permission.getNoPermissionMsg(player)); - cir.setReturnValue(TypedActionResult.fail(itemStack)); + cir.setReturnValue(ActionResult.FAIL); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChestBoatEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinChestBoatEntity.java index 031c137..6204886 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChestBoatEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinChestBoatEntity.java @@ -3,8 +3,11 @@ import com.github.zly2006.enclosure.ServerMain; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.vehicle.AbstractBoatEntity; +import net.minecraft.entity.vehicle.AbstractChestBoatEntity; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.entity.vehicle.ChestBoatEntity; +import net.minecraft.item.Item; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -14,13 +17,15 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.function.Supplier; + import static com.github.zly2006.enclosure.utils.Permission.CONTAINER; import static com.github.zly2006.enclosure.utils.Permission.VEHICLE; -@Mixin(ChestBoatEntity.class) -public class MixinChestBoatEntity extends BoatEntity { - public MixinChestBoatEntity(EntityType entityType, World world) { - super(entityType, world); +@Mixin(AbstractChestBoatEntity.class) +public abstract class MixinChestBoatEntity extends AbstractBoatEntity { + public MixinChestBoatEntity(EntityType type, World world, Supplier itemSupplier) { + super(type, world, itemSupplier); } @Inject(method = "canPlayerUse", at = @At("HEAD"), cancellable = true) @@ -39,10 +44,10 @@ private void canPlayerUse(PlayerEntity player, CallbackInfoReturnable c @Inject(method = "interact", at = @At("HEAD"), cancellable = true) private void onInteract(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { if (!ServerMain.INSTANCE.checkPermission(getWorld(), getBlockPos(), player, VEHICLE)) { - player.sendMessage(VEHICLE.getNoPermissionMsg(player)); + player.sendMessage(VEHICLE.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } else if (!ServerMain.INSTANCE.checkPermission(getWorld(), getBlockPos(), player, CONTAINER)) { - player.sendMessage(CONTAINER.getNoPermissionMsg(player)); + player.sendMessage(CONTAINER.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChiseledBookshelfBlock.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinChiseledBookshelfBlock.java index a78adca..336a0e0 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChiseledBookshelfBlock.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinChiseledBookshelfBlock.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.ItemActionResult; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -35,7 +34,7 @@ public class MixinChiseledBookshelfBlock { ) private void onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit, CallbackInfoReturnable cir, @Local OptionalInt optionalInt) { if (optionalInt.isPresent() && !ServerMain.INSTANCE.checkPermission(world, pos, player, Permission.CONTAINER)) { - player.sendMessage(CONTAINER.getNoPermissionMsg(player)); + player.sendMessage(CONTAINER.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } } @@ -48,10 +47,10 @@ private void onUse(BlockState state, World world, BlockPos pos, PlayerEntity pla ), cancellable = true ) - private void onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir, @Local OptionalInt optionalInt) { + private void onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir, @Local OptionalInt optionalInt) { if (optionalInt.isPresent() && !ServerMain.INSTANCE.checkPermission(world, pos, player, Permission.CONTAINER)) { - player.sendMessage(CONTAINER.getNoPermissionMsg(player)); - cir.setReturnValue(ItemActionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION); + player.sendMessage(CONTAINER.getNoPermissionMsg(player), false); + cir.setReturnValue(ActionResult.PASS_TO_DEFAULT_BLOCK_ACTION); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinCreeperEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinCreeperEntity.java index 3aa15f7..e737f54 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinCreeperEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinCreeperEntity.java @@ -27,7 +27,7 @@ protected MixinCreeperEntity(EntityType entityType, Wor private void onUse(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { EnclosureArea area = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) getWorld(), getBlockPos()); if (area != null && !area.hasPerm((ServerPlayerEntity) player, Permission.PRIME_TNT)) { - player.sendMessage(Permission.PRIME_TNT.getNoPermissionMsg(player)); + player.sendMessage(Permission.PRIME_TNT.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinCrossBowItem.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinCrossBowItem.java index 31b1ef5..33c0912 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinCrossBowItem.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinCrossBowItem.java @@ -6,8 +6,8 @@ import net.minecraft.item.CrossbowItem; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,12 +19,12 @@ @Mixin(CrossbowItem.class) public class MixinCrossBowItem { @Inject(method = "use", at = @At(value = "INVOKE",target = "Lnet/minecraft/item/CrossbowItem;shootAll(Lnet/minecraft/world/World;Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/util/Hand;Lnet/minecraft/item/ItemStack;FFLnet/minecraft/entity/LivingEntity;)V"), cancellable = true) - private void onShoot(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> cir, @Local ItemStack itemStack) { + private void onShoot(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir, @Local ItemStack itemStack) { if (user instanceof ServerPlayerEntity player) { if (!ServerMain.INSTANCE.checkPermission(player, SHOOT, player.getBlockPos())) { player.sendMessage(SHOOT.getNoPermissionMsg(player)); player.currentScreenHandler.syncState(); // update player's inventory - cir.setReturnValue(TypedActionResult.fail(itemStack)); + cir.setReturnValue(ActionResult.FAIL); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinEndCrystalEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinEndCrystalEntity.java index 9badba6..44509d1 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinEndCrystalEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinEndCrystalEntity.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.EndCrystalEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,7 +20,7 @@ public MixinEndCrystalEntity(EntityType type, World world) { } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), Permission.BREAK_BLOCK)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinEnderDragonEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinEnderDragonEntity.java index 3842128..40a228f 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinEnderDragonEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinEnderDragonEntity.java @@ -19,8 +19,8 @@ public MixinEnderDragonEntity(EntityType entityType super(entityType, world); } - @Redirect(method = "destroyBlocks", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;removeBlock(Lnet/minecraft/util/math/BlockPos;Z)Z")) - private boolean dragonProtection(World instance, BlockPos pos, boolean move) { + @Redirect(method = "destroyBlocks", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;removeBlock(Lnet/minecraft/util/math/BlockPos;Z)Z")) + private boolean dragonProtection(ServerWorld instance, BlockPos pos, boolean move) { if (instance instanceof ServerWorld serverWorld) { EnclosureArea a = ServerMain.INSTANCE.getSmallestEnclosure(serverWorld, pos); if (a != null && !a.hasPubPerm(Permission.DRAGON_DESTROY)) { diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinExplosion.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinExplosion.java index 4610090..49770bb 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinExplosion.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinExplosion.java @@ -3,31 +3,37 @@ import com.github.zly2006.enclosure.EnclosureArea; import com.github.zly2006.enclosure.ServerMain; import com.github.zly2006.enclosure.utils.Permission; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.entity.Entity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion; +import net.minecraft.world.explosion.ExplosionImpl; import org.spongepowered.asm.mixin.Final; 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.ModifyVariable; import java.util.List; -@Mixin(Explosion.class) +@Mixin(ExplosionImpl.class) public abstract class MixinExplosion { - @Shadow - @Final - private ObjectArrayList affectedBlocks; @Shadow @Final - private World world; + private ServerWorld world; - @ModifyVariable(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;(DDD)V", ordinal = 1), method = "collectBlocksAndDamageEntities") + @ModifyExpressionValue(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/explosion/ExplosionImpl;getBlocksToDestroy()Ljava/util/List;"), method = "explode") + private List protectBlocks(List list) { + if (!world.isClient) { + list.removeIf(pos -> { + EnclosureArea a = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) world, pos); + return a != null && !a.hasPubPerm(Permission.EXPLOSION); + }); + } + return list; + } + + @ModifyExpressionValue(method = "damageEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;getOtherEntities(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/Box;)Ljava/util/List;")) private List protectEntities(List list) { if (!world.isClient) { list.removeIf(entity -> { @@ -36,10 +42,6 @@ private List protectEntities(List list) { EnclosureArea a = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) world, pos); return a != null && !a.hasPubPerm(Permission.EXPLOSION); }); - this.affectedBlocks.removeIf(pos -> { - EnclosureArea a = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) world, pos); - return a != null && !a.hasPubPerm(Permission.EXPLOSION); - }); } return list; } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinFarmlandBlock.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinFarmlandBlock.java index 1af28d6..7302e2e 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinFarmlandBlock.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinFarmlandBlock.java @@ -19,7 +19,7 @@ public class MixinFarmlandBlock { private static void onLandedUpon(Entity entity, BlockState state, World world, BlockPos pos, CallbackInfo ci) { if (entity instanceof PlayerEntity player) { if (!ServerMain.INSTANCE.checkPermission(world, pos, player, Permission.FARMLAND_DESTROY)) { - entity.sendMessage(Permission.FARMLAND_DESTROY.getNoPermissionMsg(player)); + player.sendMessage(Permission.FARMLAND_DESTROY.getNoPermissionMsg(player), false); ci.cancel(); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinFlowableFluid.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinFlowableFluid.java index 44fdef0..9d4f431 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinFlowableFluid.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinFlowableFluid.java @@ -18,11 +18,11 @@ @Mixin(FlowableFluid.class) public abstract class MixinFlowableFluid { - @Inject(method = "canFlow", at = @At("HEAD"), cancellable = true) - private void protectFluid(BlockView world, BlockPos fluidPos, BlockState fluidBlockState, Direction flowDirection, BlockPos flowTo, BlockState flowToBlockState, FluidState fluidState, Fluid fluid, CallbackInfoReturnable cir) { + @Inject(method = "canFlowThrough(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Direction;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/fluid/FluidState;)Z", at = @At("HEAD"), cancellable = true) + private void protectFluid(BlockView world, BlockPos pos, BlockState state, Direction face, BlockPos fromPos, BlockState fromState, FluidState fluidState, CallbackInfoReturnable cir) { if (world instanceof ServerWorld serverWorld) { - EnclosureArea from = ServerMain.INSTANCE.getSmallestEnclosure(serverWorld, fluidPos); - EnclosureArea to = ServerMain.INSTANCE.getSmallestEnclosure(serverWorld, flowTo); + EnclosureArea from = ServerMain.INSTANCE.getSmallestEnclosure(serverWorld, fromPos); + EnclosureArea to = ServerMain.INSTANCE.getSmallestEnclosure(serverWorld, pos); if (to != null && to != from) { if (!to.hasPubPerm(Permission.FLUID)) { cir.setReturnValue(false); diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinItemFrameEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinItemFrameEntity.java index 68f6c44..1e96549 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinItemFrameEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinItemFrameEntity.java @@ -30,14 +30,14 @@ private void onUse(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "damage", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;dropHeldStack(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/Entity;Z)V"), cancellable = true) + private void onDamages(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), Permission.ITEM_FRAME)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinLeadItem.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinLeadItem.java index b3be2b1..fee743c 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinLeadItem.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinLeadItem.java @@ -18,7 +18,7 @@ public class MixinLeadItem { @Inject(method = "attachHeldMobsToBlock", at = @At("HEAD"), cancellable = true) private static void onAttachHeldMobsToBlock(PlayerEntity player, World world, BlockPos pos, CallbackInfoReturnable cir) { if (!ServerMain.INSTANCE.checkPermission(world, pos, player, LEASH)) { - player.sendMessage(LEASH.getNoPermissionMsg(player)); + player.sendMessage(LEASH.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.PASS); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinLivingEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinLivingEntity.java index 40e16eb..feaf87c 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinLivingEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinLivingEntity.java @@ -5,6 +5,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,7 +21,7 @@ public MixinLivingEntity(EntityType type, World world) { } @Inject(at = @At("HEAD"), method = "damage", cancellable = true) - private void damage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void damage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (getWorld().isClient) { return; } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinMinecartEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinMinecartEntity.java index 8de452e..8b2a1ad 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinMinecartEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinMinecartEntity.java @@ -24,7 +24,7 @@ protected MixinMinecartEntity(EntityType entityType, World world) { @Inject(method = "interact", at = @At("HEAD"), cancellable = true) private void onInteract(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { if (!ServerMain.INSTANCE.checkPermission(getWorld(), getBlockPos(), player, VEHICLE)) { - player.sendMessage(VEHICLE.getNoPermissionMsg(player)); + player.sendMessage(VEHICLE.getNoPermissionMsg(player), false); cir.setReturnValue(ActionResult.FAIL); } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinServerPlayerEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinServerPlayerEntity.java index 52efecf..7bd7998 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinServerPlayerEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinServerPlayerEntity.java @@ -127,7 +127,7 @@ private void onOpenHorseInventory(CallbackInfo ci) { } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void protectPVP(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void protectPVP(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (source.getAttacker() instanceof ServerPlayerEntity attacker) { //pvp EnclosureArea area = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) getWorld(), getBlockPos()); @@ -232,7 +232,7 @@ private void onTick(CallbackInfo ci) { player.sendMessage(MOVE.getNoPermissionMsg(player)); if (area != lastArea && lastWorld != null && lastPos != null) { // teleport back - player.teleport(lastWorld, lastPos.x, lastPos.y, lastPos.z, 0, 0); + player.teleport(lastWorld, lastPos.x, lastPos.y, lastPos.z, Set.of(), 0, 0, true); } else { // kick area.kickPlayer(player); diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTadpoleEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTadpoleEntity.java index 817b942..880a22e 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTadpoleEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTadpoleEntity.java @@ -22,7 +22,7 @@ public interface MixinTadpoleEntity { private static void interactMob(PlayerEntity player, Hand hand, T entity, CallbackInfoReturnable> cir) { if (player instanceof ServerPlayerEntity serverPlayer) { if (!ServerMain.INSTANCE.checkPermission(player.getWorld(), entity.getBlockPos(), player, Permission.FISH)) { - player.sendMessage(Permission.FISH.getNoPermissionMsg(player)); + player.sendMessage(Permission.FISH.getNoPermissionMsg(player), false); serverPlayer.networkHandler.sendPacket(entity.createSpawnPacket(serverPlayer.getServerWorld().getChunkManager().chunkLoadingManager.entityTrackers.get(entity.getId()).entry)); serverPlayer.networkHandler.sendPacket(new EntityTrackerUpdateS2CPacket(entity.getId(), entity.getDataTracker().getChangedEntries())); cir.setReturnValue(Optional.empty()); diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChorusFruitItem.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTeleportRandomlyConsumeEffect.java similarity index 65% rename from src/main/java/com/github/zly2006/enclosure/mixin/MixinChorusFruitItem.java rename to src/main/java/com/github/zly2006/enclosure/mixin/MixinTeleportRandomlyConsumeEffect.java index 5572398..4d397a4 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinChorusFruitItem.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTeleportRandomlyConsumeEffect.java @@ -3,8 +3,8 @@ import com.github.zly2006.enclosure.ServerMain; import com.github.zly2006.enclosure.utils.Utils; import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ChorusFruitItem; import net.minecraft.item.ItemStack; +import net.minecraft.item.consume.TeleportRandomlyConsumeEffect; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -17,15 +17,15 @@ import static com.github.zly2006.enclosure.utils.Permission.TELEPORT; -@Mixin(ChorusFruitItem.class) -public class MixinChorusFruitItem { - @Inject(method = "finishUsing", locals = LocalCapture.CAPTURE_FAILSOFT, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;teleport(DDDZ)Z"), cancellable = true) - private void tp(ItemStack stack, World world, LivingEntity user, CallbackInfoReturnable cir, ItemStack itemStack, int i, double d, double e, double f, Vec3d vec3d) { +@Mixin(TeleportRandomlyConsumeEffect.class) +public class MixinTeleportRandomlyConsumeEffect { + @Inject(method = "onConsume", locals = LocalCapture.CAPTURE_FAILSOFT, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;teleport(DDDZ)Z"), cancellable = true) + private void tp(World world, ItemStack stack, LivingEntity user, CallbackInfoReturnable cir, boolean bl, int i, double d, double e, double f, Vec3d vec3d) { if (user instanceof ServerPlayerEntity player) { BlockPos pos = Utils.toBlockPos(d, e, f); if (!ServerMain.INSTANCE.checkPermission(player, TELEPORT, pos)) { player.sendMessage(TELEPORT.getNoPermissionMsg(player)); - cir.setReturnValue(stack); + cir.setReturnValue(false); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntBlock.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntBlock.java index 3afb57f..bbf3c07 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntBlock.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntBlock.java @@ -10,8 +10,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; -import net.minecraft.util.ItemActionResult; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -24,12 +24,12 @@ @Mixin(TntBlock.class) public class MixinTntBlock { @Inject(method = "onUseWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/TntBlock;primeTnt(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/LivingEntity;)V"), cancellable = true) - private void onUseInject(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + private void onUseInject(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { if (player instanceof ServerPlayerEntity serverPlayer) { EnclosureArea area = ServerMain.INSTANCE.getSmallestEnclosure((ServerWorld) world, pos); if (area != null && !area.hasPerm(serverPlayer, Permission.PRIME_TNT)) { - player.sendMessage(Permission.PRIME_TNT.getNoPermissionMsg(player)); - cir.setReturnValue(ItemActionResult.FAIL); + player.sendMessage(Permission.PRIME_TNT.getNoPermissionMsg(player), false); + cir.setReturnValue(ActionResult.FAIL); } } } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntMinecartEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntMinecartEntity.java index f94bda0..2dcadcb 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntMinecartEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinTntMinecartEntity.java @@ -5,6 +5,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.vehicle.AbstractMinecartEntity; import net.minecraft.entity.vehicle.TntMinecartEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,7 +21,7 @@ protected MixinTntMinecartEntity(EntityType entityType, World world) { } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), VEHICLE)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinVehicleEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinVehicleEntity.java index 62b52d7..5ebc80e 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinVehicleEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinVehicleEntity.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.vehicle.VehicleEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,7 +20,7 @@ public MixinVehicleEntity(EntityType type, World world) { } @Inject(method = "damage", at = @At("HEAD"), cancellable = true) - private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { if (!Utils.commonOnDamage(source, getBlockPos(), getWorld(), Permission.VEHICLE)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/github/zly2006/enclosure/mixin/MixinWitherEntity.java b/src/main/java/com/github/zly2006/enclosure/mixin/MixinWitherEntity.java index 33d6f9a..fe68105 100644 --- a/src/main/java/com/github/zly2006/enclosure/mixin/MixinWitherEntity.java +++ b/src/main/java/com/github/zly2006/enclosure/mixin/MixinWitherEntity.java @@ -21,7 +21,7 @@ public MixinWitherEntity(EntityType type, World world) { super(type, world); } - @Inject(method = "mobTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;breakBlock(Lnet/minecraft/util/math/BlockPos;ZLnet/minecraft/entity/Entity;)Z"), cancellable = true) + @Inject(method = "mobTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;breakBlock(Lnet/minecraft/util/math/BlockPos;ZLnet/minecraft/entity/Entity;)Z"), cancellable = true) private void onBreakBlock(CallbackInfo ci, @Local BlockPos blockPos) { if (getWorld().isClient) { return; diff --git a/src/main/java/com/github/zly2006/enclosure/utils/Utils.java b/src/main/java/com/github/zly2006/enclosure/utils/Utils.java index 8bc2fe4..c499abb 100644 --- a/src/main/java/com/github/zly2006/enclosure/utils/Utils.java +++ b/src/main/java/com/github/zly2006/enclosure/utils/Utils.java @@ -74,7 +74,7 @@ public static Text pager(int size, int page, List< } public static int topYOf(ServerWorld world, int x, int z) { - return topYOf(world, x, z, world.getTopY() - 1); + return topYOf(world, x, z, world.getTopYInclusive()); } public static int topYOf(ServerWorld world, int x, int z, int startY) { diff --git a/src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt b/src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt index 243c65f..c06b8c5 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt @@ -186,10 +186,10 @@ open class EnclosureArea : PersistentState, EnclosureView { val overworld = player.server.overworld val spawnPos = overworld.spawnPos player.teleport( - overworld, spawnPos.x.toDouble() + 0.5, spawnPos.y.toDouble(), spawnPos.z.toDouble() + 0.5, 0f, 0f + overworld, spawnPos.x.toDouble() + 0.5, spawnPos.y.toDouble(), spawnPos.z.toDouble() + 0.5, setOf(), 0f, 0f, true ) } else { - player.teleport(world, x.toDouble(), y.toDouble(), z.toDouble(), 0f, 0f) + player.teleport(world, x.toDouble(), y.toDouble(), z.toDouble(), setOf(), 0f, 0f, true) } } @@ -443,7 +443,7 @@ open class EnclosureArea : PersistentState, EnclosureView { if (player.isSleeping) { player.wakeUp() } - player.teleport(world, teleportPos!!.x, teleportPos!!.y, teleportPos!!.z, yaw, pitch) + player.teleport(world, teleportPos!!.x, teleportPos!!.y, teleportPos!!.z, setOf(), yaw, pitch, true) } override fun onRemoveChild(child: PermissionHolder) { diff --git a/src/main/kotlin/com/github/zly2006/enclosure/ServerMain.kt b/src/main/kotlin/com/github/zly2006/enclosure/ServerMain.kt index e8676b2..01b8df6 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/ServerMain.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/ServerMain.kt @@ -473,17 +473,17 @@ object ServerMain: ModInitializer { .map { it.key } .map { permission -> if (checkPermission(player, permission, blockPos)) { - return@map TypedActionResult.pass(player.getStackInHand(hand)) + return@map ActionResult.PASS } else { player.currentScreenHandler.syncState() player.sendMessage(permission.getNoPermissionMsg(player)) - return@map TypedActionResult.fail(player.getStackInHand(hand)) + return@map ActionResult.FAIL } } - .filter { result -> result.result != ActionResult.PASS } - .firstOrNull() ?: TypedActionResult.pass(player.getStackInHand(hand)) + .filter { result -> result != ActionResult.PASS } + .firstOrNull() ?: ActionResult.PASS } - return@register TypedActionResult.pass(player.getStackInHand(hand)) + return@register ActionResult.PASS; } AttackBlockCallback.EVENT.register(id) { player, world, _, pos, _ -> if (player is ServerPlayerEntity) { @@ -507,7 +507,7 @@ object ServerMain: ModInitializer { UseEntityCallback.EVENT.register { player, world, hand, entity, _ -> if (entity is ArmorStandEntity) { if (!checkPermission(world!!, entity.getBlockPos(), player, Permission.ARMOR_STAND)) { - player.sendMessage(Permission.ARMOR_STAND.getNoPermissionMsg(player)) + player.sendMessage(Permission.ARMOR_STAND.getNoPermissionMsg(player), false) player.currentScreenHandler.syncState() // We don't need to sync entity in this situation return@register ActionResult.FAIL diff --git a/src/main/kotlin/com/github/zly2006/enclosure/client/EnclosureWorldRenderer.kt b/src/main/kotlin/com/github/zly2006/enclosure/client/EnclosureWorldRenderer.kt index 1c70241..92ffdc6 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/client/EnclosureWorldRenderer.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/client/EnclosureWorldRenderer.kt @@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents import net.minecraft.client.MinecraftClient +import net.minecraft.client.gl.ShaderProgramKeys import net.minecraft.client.render.* import net.minecraft.client.util.math.MatrixStack import net.minecraft.util.math.Vec3d @@ -54,7 +55,7 @@ object EnclosureWorldRenderer { val matrix4f = matrices.peek().positionMatrix val matrix3f = matrices.peek() // Render two points - WorldRenderer.drawBox( + VertexRendering.drawBox( matrices, linesBuffer, session.pos1.x - cameraPos.x, session.pos1.y - cameraPos.y, @@ -64,7 +65,7 @@ object EnclosureWorldRenderer { session.pos1.z + 1 - cameraPos.z, 1f, 0.25f, 0.25f, alpha ) - WorldRenderer.drawBox( + VertexRendering.drawBox( matrices, linesBuffer, session.pos2.x - cameraPos.getX(), session.pos2.y - cameraPos.getY(), @@ -103,7 +104,7 @@ object EnclosureWorldRenderer { val matrix4f = matrices.peek().positionMatrix matrices.push() RenderSystem.disableCull() - RenderSystem.setShader { GameRenderer.getPositionColorProgram() } + RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR) fun drawFace(x1: Float, y1: Float, z1: Float, x2: Float, y2: Float, z2: Float, x3: Float, y3: Float, z3: Float, x4: Float, y4: Float, z4: Float, red: Float, green: Float, blue: Float, alpha: Float) { val bufferBuilder = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR) bufferBuilder.vertex(matrix4f, x1, y1, z1).color(red, green, blue, alpha) diff --git a/src/main/kotlin/com/github/zly2006/enclosure/network/play/BackgroundMusicPayload.kt b/src/main/kotlin/com/github/zly2006/enclosure/network/play/BackgroundMusicPayload.kt index 909f33f..2c00e16 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/network/play/BackgroundMusicPayload.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/network/play/BackgroundMusicPayload.kt @@ -40,7 +40,7 @@ class BackgroundMusicPayload( (mc as ClientAccess).bgm = null } else { (mc as ClientAccess).bgm = MusicSound( - mc.player!!.registryManager.get(RegistryKeys.SOUND_EVENT).getEntry(p.music).orElseThrow(), + mc.player!!.registryManager.getOrThrow(RegistryKeys.SOUND_EVENT).getEntry(p.music).orElseThrow(), 12000, 24000, true diff --git a/src/main/kotlin/com/github/zly2006/enclosure/utils/Permission.kt b/src/main/kotlin/com/github/zly2006/enclosure/utils/Permission.kt index 451d305..fc531c2 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/utils/Permission.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/utils/Permission.kt @@ -292,8 +292,8 @@ class Permission( val DISPENSER = Permission("dispenser", Target.Enclosure, icon = Items.DISPENSER).apply(::register) @JvmField val RAID = Permission("raid", Target.Enclosure, defaultValue = true, iconSupplier = { - Raid.getOminousBanner( - MinecraftClient.getInstance().networkHandler!!.registryManager.getWrapperOrThrow( + Raid.createOminousBanner( + MinecraftClient.getInstance().networkHandler!!.registryManager.getOrThrow( RegistryKeys.BANNER_PATTERN ) ) diff --git a/src/main/kotlin/com/github/zly2006/enclosure/utils/Utils.kt b/src/main/kotlin/com/github/zly2006/enclosure/utils/Utils.kt index 83f9daa..bfe9a3c 100644 --- a/src/main/kotlin/com/github/zly2006/enclosure/utils/Utils.kt +++ b/src/main/kotlin/com/github/zly2006/enclosure/utils/Utils.kt @@ -68,7 +68,7 @@ fun literalText(text: Any): MutableText { } fun ServerWorld.mark4updateChecked(pos: BlockPos): Boolean { - if (worldBorder.contains(pos) && pos.y >= bottomY && pos.y < topY) { + if (worldBorder.contains(pos) && isInHeightLimit(pos.y)) { chunkManager.markForUpdate(pos) return true } diff --git a/src/main/resources/enclosure.mixins.json b/src/main/resources/enclosure.mixins.json index 8cd6378..de9c32e 100644 --- a/src/main/resources/enclosure.mixins.json +++ b/src/main/resources/enclosure.mixins.json @@ -19,7 +19,6 @@ "MixinChestBlock", "MixinChestBoatEntity", "MixinChiseledBookshelfBlock", - "MixinChorusFruitItem", "MixinCreeperEntity", "MixinCrossBowItem", "MixinDispenserBlock", @@ -58,6 +57,7 @@ "MixinServerPlayerEntity", "MixinStorageMinecartEntity", "MixinTadpoleEntity", + "MixinTeleportRandomlyConsumeEffect", "MixinTntBlock", "MixinTntMinecartEntity", "MixinTurtleEggBlock",