From 2a1d65a30d4c42d7ab88755131d0539ada0286c8 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Wed, 26 Aug 2020 20:15:46 +0200 Subject: [PATCH] add raid permission --- .../flemmli97/flan/claim/EnumPermission.java | 9 ++++++-- .../com/flemmli97/flan/event/WorldEvents.java | 8 +++++++ .../flan/gui/ServerScreenHelper.java | 2 +- .../flan/mixin/RaidManagerMixin.java | 22 +++++++++++++++++++ src/main/resources/flan.mixins.json | 3 ++- 5 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/flemmli97/flan/mixin/RaidManagerMixin.java diff --git a/src/main/java/com/flemmli97/flan/claim/EnumPermission.java b/src/main/java/com/flemmli97/flan/claim/EnumPermission.java index fa88b23..73a03c8 100644 --- a/src/main/java/com/flemmli97/flan/claim/EnumPermission.java +++ b/src/main/java/com/flemmli97/flan/claim/EnumPermission.java @@ -2,7 +2,9 @@ package com.flemmli97.flan.claim; import com.flemmli97.flan.config.ConfigHandler; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.village.raid.Raid; public enum EnumPermission { @@ -29,6 +31,7 @@ public enum EnumPermission { PROJECTILES(Items.ARROW), TRAMPLE(Items.FARMLAND), PORTAL(Items.OBSIDIAN), + RAID(null), BOAT(Items.OAK_BOAT), MINECART(Items.MINECART), BUCKET(Items.BUCKET), @@ -49,7 +52,9 @@ public enum EnumPermission { this.item = item; } - public Item getItem() { - return this.item; + public ItemStack getItem() { + if(this==RAID) + return Raid.getOminousBanner(); + return new ItemStack(this.item); } } diff --git a/src/main/java/com/flemmli97/flan/event/WorldEvents.java b/src/main/java/com/flemmli97/flan/event/WorldEvents.java index 38ba2b3..8e52cc5 100644 --- a/src/main/java/com/flemmli97/flan/event/WorldEvents.java +++ b/src/main/java/com/flemmli97/flan/event/WorldEvents.java @@ -5,6 +5,7 @@ import com.flemmli97.flan.claim.ClaimStorage; import com.flemmli97.flan.claim.EnumPermission; import net.minecraft.block.BlockState; import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -60,4 +61,11 @@ public class WorldEvents { fl = from.equals(to); return fl; } + + public static boolean canStartRaid(ServerPlayerEntity player){ + Claim claim = ClaimStorage.get(player.getServerWorld()).getClaimAt(player.getBlockPos()); + if(claim!=null && !claim.canInteract(player, EnumPermission.RAID, player.getBlockPos())) + return false; + return true; + } } diff --git a/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java b/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java index ce5ecee..840cfbc 100644 --- a/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java +++ b/src/main/java/com/flemmli97/flan/gui/ServerScreenHelper.java @@ -25,7 +25,7 @@ public class ServerScreenHelper { } public static ItemStack fromPermission(Claim claim, EnumPermission perm, String group) { - ItemStack stack = new ItemStack(perm.getItem()); + ItemStack stack = perm.getItem(); stack.setCustomName(new LiteralText(perm.toString()).setStyle(Style.EMPTY.withFormatting(Formatting.GOLD))); ListTag lore = new ListTag(); String permFlag; diff --git a/src/main/java/com/flemmli97/flan/mixin/RaidManagerMixin.java b/src/main/java/com/flemmli97/flan/mixin/RaidManagerMixin.java new file mode 100644 index 0000000..51af766 --- /dev/null +++ b/src/main/java/com/flemmli97/flan/mixin/RaidManagerMixin.java @@ -0,0 +1,22 @@ +package com.flemmli97.flan.mixin; + +import com.flemmli97.flan.event.WorldEvents; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.village.raid.Raid; +import net.minecraft.village.raid.RaidManager; +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.CallbackInfoReturnable; + +@Mixin(RaidManager.class) +public class RaidManagerMixin { + + @Inject(method = "startRaid", at = @At(value = "HEAD"), cancellable = true) + public void checkRaid(ServerPlayerEntity player, CallbackInfoReturnable info){ + if(!WorldEvents.canStartRaid(player)){ + info.setReturnValue(null); + info.cancel(); + } + } +} diff --git a/src/main/resources/flan.mixins.json b/src/main/resources/flan.mixins.json index f8b9b2f..518ea42 100644 --- a/src/main/resources/flan.mixins.json +++ b/src/main/resources/flan.mixins.json @@ -19,7 +19,8 @@ "ItemStackMixin", "ILecternBlockValues", "FluidMixin", - "PistonMixin" + "PistonMixin", + "RaidManagerMixin" ], "server": [ ],