protect against item useItem block edit
Some checks failed
/ Auto-Build-App (push) Has been cancelled

This commit is contained in:
pietru 2025-01-09 11:57:22 +01:00
parent 8b377e21cb
commit 8d4cbbea70
2 changed files with 43 additions and 2 deletions

View file

@ -9,9 +9,9 @@ group=net.pietru
id=cookie_utils
# Dependency Versions
cosmic_reach_version=0.3.15
cosmic_reach_version=0.3.16
# If unspecified, will use the version above
cosmic_reach_server_version=0.3.15
cosmic_reach_server_version=0.3.16
cosmic_quilt_version=2.3.1
#2.2.0

View file

@ -0,0 +1,41 @@
package net.pietru.cookie_utils.mixins;
import com.llamalad7.mixinextras.sugar.Local;
import finalforeach.cosmicreach.accounts.Account;
import finalforeach.cosmicreach.blocks.BlockPosition;
import finalforeach.cosmicreach.blocks.BlockState;
import finalforeach.cosmicreach.entities.player.Player;
import finalforeach.cosmicreach.items.ItemSlot;
import finalforeach.cosmicreach.items.ItemThing;
import finalforeach.cosmicreach.networking.NetworkIdentity;
import finalforeach.cosmicreach.networking.NetworkSide;
import finalforeach.cosmicreach.networking.packets.MessagePacket;
import finalforeach.cosmicreach.networking.packets.blocks.InteractBlockPacket;
import finalforeach.cosmicreach.networking.server.ServerSingletons;
import io.netty.channel.ChannelHandlerContext;
import net.pietru.cookie_utils.permissions.Permissions;
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.callback.CallbackInfo;
import static net.pietru.cookie_utils.api.Region.can_edit_block;
import static net.pietru.cookie_utils.api.Region.is_not_reloading;
@Mixin(ItemThing.class)
public class ItemThingMixin {
@Inject(method = "handle", at = @At("HEAD"), cancellable = true)
private void event_item_useItem(CallbackInfo ci, @Local ItemSlot itemSlot, @Local Player player, @Local BlockPosition targetBlockPos){
Account account = player.getAccount();
if (targetBlockPos!=null) {
if (!Permissions.has_user_special_perm(account.getUniqueId()) && !can_edit_block(targetBlockPos, "interact", account.getUniqueId())) {
ci.cancel();
MessagePacket packet = new MessagePacket("[Server] " + (is_not_reloading ? "Sorry, but this area is under protection." : "Sorry but you can't do this action right now. [Config Reload In Progress]"));
packet.setupAndSend(ServerSingletons.getConnection(player));
}
}
}
}