add snowman + enderman grief permission closes #31
This commit is contained in:
parent
d75f788288
commit
763439d907
@ -1,3 +1,9 @@
|
|||||||
|
Flan 1.3.2
|
||||||
|
======================
|
||||||
|
- Change gui item text to non italic (there are some very picky people)
|
||||||
|
- Add enderman grief permission
|
||||||
|
- Add snowman snowlayers permission
|
||||||
|
|
||||||
Flan 1.3.1
|
Flan 1.3.1
|
||||||
======================
|
======================
|
||||||
- Fix the nullpointer when creating claims. derp
|
- Fix the nullpointer when creating claims. derp
|
||||||
|
@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx2G
|
|||||||
loader_version=0.9.1+build.205
|
loader_version=0.9.1+build.205
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version = 1.3.1
|
mod_version = 1.3.2
|
||||||
maven_group = com.flemmli97.flan
|
maven_group = com.flemmli97.flan
|
||||||
archives_base_name = flan
|
archives_base_name = flan
|
||||||
|
|
||||||
|
@ -66,9 +66,12 @@ public class PermissionRegistry {
|
|||||||
public static ClaimPermission BREAKNONLIVING = register(new ClaimPermission("BREAKNONLIVING", () -> new ItemStack(Items.COMMAND_BLOCK_MINECART), "Permission to break things like minecarts or armor stands"));
|
public static ClaimPermission BREAKNONLIVING = register(new ClaimPermission("BREAKNONLIVING", () -> new ItemStack(Items.COMMAND_BLOCK_MINECART), "Permission to break things like minecarts or armor stands"));
|
||||||
public static ClaimPermission DROP = register(new ClaimPermission("DROP", () -> new ItemStack(Items.BOWL), true, "Allow the drop of items"));
|
public static ClaimPermission DROP = register(new ClaimPermission("DROP", () -> new ItemStack(Items.BOWL), true, "Allow the drop of items"));
|
||||||
public static ClaimPermission PICKUP = register(new ClaimPermission("PICKUP", () -> new ItemStack(Items.BRICK), true, "Allow the pickup of items"));
|
public static ClaimPermission PICKUP = register(new ClaimPermission("PICKUP", () -> new ItemStack(Items.BRICK), true, "Allow the pickup of items"));
|
||||||
|
|
||||||
public static ClaimPermission HURTPLAYER = global(new ClaimPermission("HURTPLAYER", () -> new ItemStack(Items.DIAMOND_SWORD), "Permission to hurt other players"));
|
public static ClaimPermission HURTPLAYER = global(new ClaimPermission("HURTPLAYER", () -> new ItemStack(Items.DIAMOND_SWORD), "Permission to hurt other players"));
|
||||||
public static ClaimPermission EXPLOSIONS = global(new ClaimPermission("EXPLOSIONS", () -> new ItemStack(Items.TNT), "Toggle explosions in claim"));
|
public static ClaimPermission EXPLOSIONS = global(new ClaimPermission("EXPLOSIONS", () -> new ItemStack(Items.TNT), "Toggle explosions in claim"));
|
||||||
public static ClaimPermission WITHER = global(new ClaimPermission("WITHER", () -> new ItemStack(Items.WITHER_SKELETON_SKULL), "Toggle wither breaking blocks in claim"));
|
public static ClaimPermission WITHER = global(new ClaimPermission("WITHER", () -> new ItemStack(Items.WITHER_SKELETON_SKULL), "Toggle wither breaking blocks in claim"));
|
||||||
|
public static ClaimPermission ENDERMAN = global(new ClaimPermission("ENDERMAN", () -> new ItemStack(Items.ENDER_EYE), true, "Allow enderman picking and placing blocks"));
|
||||||
|
public static ClaimPermission SNOWGOLEM = global(new ClaimPermission("SNOWGOLEM", () -> new ItemStack(Items.SNOW_BLOCK), true, "Allow snowgolems snowlayer"));
|
||||||
public static ClaimPermission FIRESPREAD = global(new ClaimPermission("FIRESPREAD", () -> new ItemStack(Items.BLAZE_POWDER), "Toggle firespread in claim"));
|
public static ClaimPermission FIRESPREAD = global(new ClaimPermission("FIRESPREAD", () -> new ItemStack(Items.BLAZE_POWDER), "Toggle firespread in claim"));
|
||||||
public static ClaimPermission WATERBORDER = global(new ClaimPermission("WATERBORDER", () -> new ItemStack(Items.WATER_BUCKET), "Toggle water crossing claim borders"));
|
public static ClaimPermission WATERBORDER = global(new ClaimPermission("WATERBORDER", () -> new ItemStack(Items.WATER_BUCKET), "Toggle water crossing claim borders"));
|
||||||
public static ClaimPermission PISTONBORDER = global(new ClaimPermission("PISTONBORDER", () -> new ItemStack(Items.PISTON), "Toggle piston pull/push across claim borders"));
|
public static ClaimPermission PISTONBORDER = global(new ClaimPermission("PISTONBORDER", () -> new ItemStack(Items.PISTON), "Toggle piston pull/push across claim borders"));
|
||||||
|
@ -16,7 +16,9 @@ import net.minecraft.entity.boss.WitherEntity;
|
|||||||
import net.minecraft.entity.damage.DamageSource;
|
import net.minecraft.entity.damage.DamageSource;
|
||||||
import net.minecraft.entity.decoration.ArmorStandEntity;
|
import net.minecraft.entity.decoration.ArmorStandEntity;
|
||||||
import net.minecraft.entity.decoration.ItemFrameEntity;
|
import net.minecraft.entity.decoration.ItemFrameEntity;
|
||||||
|
import net.minecraft.entity.mob.EndermanEntity;
|
||||||
import net.minecraft.entity.mob.Monster;
|
import net.minecraft.entity.mob.Monster;
|
||||||
|
import net.minecraft.entity.passive.SnowGolemEntity;
|
||||||
import net.minecraft.entity.passive.TameableEntity;
|
import net.minecraft.entity.passive.TameableEntity;
|
||||||
import net.minecraft.entity.passive.VillagerEntity;
|
import net.minecraft.entity.passive.VillagerEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
@ -41,6 +43,7 @@ import net.minecraft.util.hit.BlockHitResult;
|
|||||||
import net.minecraft.util.hit.EntityHitResult;
|
import net.minecraft.util.hit.EntityHitResult;
|
||||||
import net.minecraft.util.hit.HitResult;
|
import net.minecraft.util.hit.HitResult;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@ -252,4 +255,30 @@ public class EntityInteractEvents {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean canEndermanInteract(EndermanEntity enderman, BlockPos pos) {
|
||||||
|
if (enderman.world.isClient)
|
||||||
|
return true;
|
||||||
|
ClaimStorage storage = ClaimStorage.get((ServerWorld) enderman.world);
|
||||||
|
IPermissionContainer claim = storage.getForPermissionCheck(pos);
|
||||||
|
if (!claim.canInteract(null, PermissionRegistry.ENDERMAN, pos, false))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean canSnowGolemInteract(SnowGolemEntity snowgolem) {
|
||||||
|
if (snowgolem.world.isClient)
|
||||||
|
return true;
|
||||||
|
int x, y, z;
|
||||||
|
for (int l = 0; l < 4; ++l) {
|
||||||
|
x = MathHelper.floor(snowgolem.getX() + (l % 2 * 2 - 1) * 0.25F);
|
||||||
|
y = MathHelper.floor(snowgolem.getY());
|
||||||
|
z = MathHelper.floor(snowgolem.getZ() + (l / 2 % 2 * 2 - 1) * 0.25F);
|
||||||
|
BlockPos pos = new BlockPos(x, y, z);
|
||||||
|
IPermissionContainer claim = ClaimStorage.get((ServerWorld) snowgolem.world).getForPermissionCheck(pos);
|
||||||
|
if (!claim.canInteract(null, PermissionRegistry.SNOWGOLEM, pos, false))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.flemmli97.flan.mixin;
|
||||||
|
|
||||||
|
import com.flemmli97.flan.event.EntityInteractEvents;
|
||||||
|
import net.minecraft.entity.mob.EndermanEntity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Mixin(targets = "net/minecraft/entity/mob/EndermanEntity$PickUpBlockGoal")
|
||||||
|
public abstract class EndermanPickupMixin {
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
private EndermanEntity enderman;
|
||||||
|
|
||||||
|
@ModifyVariable(method = "Lnet/minecraft/entity/mob/EndermanEntity$PickUpBlockGoal;tick()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"), ordinal = 0)
|
||||||
|
private BlockPos pickupCheck(BlockPos pos) {
|
||||||
|
if (!EntityInteractEvents.canEndermanInteract(this.enderman, pos)) {
|
||||||
|
return BlockPos.ORIGIN;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.flemmli97.flan.mixin;
|
||||||
|
|
||||||
|
import com.flemmli97.flan.event.EntityInteractEvents;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.mob.EndermanEntity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(targets = "net/minecraft/entity/mob/EndermanEntity$PlaceBlockGoal")
|
||||||
|
public class EndermanPlaceMixin {
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
private EndermanEntity enderman;
|
||||||
|
|
||||||
|
@Inject(method = "Lnet/minecraft/entity/mob/EndermanEntity$PlaceBlockGoal;canPlaceOn(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)Z", at = @At(value = "HEAD"), cancellable = true)
|
||||||
|
private void placeCheck(World world, BlockPos posAbove, BlockState carriedState, BlockState stateAbove, BlockState state, BlockPos pos, CallbackInfoReturnable<Boolean> info) {
|
||||||
|
if (!EntityInteractEvents.canEndermanInteract(this.enderman, pos)) {
|
||||||
|
info.setReturnValue(false);
|
||||||
|
info.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
src/main/java/com/flemmli97/flan/mixin/SnowGolemMixin.java
Normal file
19
src/main/java/com/flemmli97/flan/mixin/SnowGolemMixin.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.flemmli97.flan.mixin;
|
||||||
|
|
||||||
|
import com.flemmli97.flan.event.EntityInteractEvents;
|
||||||
|
import net.minecraft.entity.passive.SnowGolemEntity;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Mixin(SnowGolemEntity.class)
|
||||||
|
public abstract class SnowGolemMixin {
|
||||||
|
|
||||||
|
@Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getGameRules()Lnet/minecraft/world/GameRules;"), cancellable = true)
|
||||||
|
private void checkSnow(CallbackInfo info) {
|
||||||
|
if (!EntityInteractEvents.canSnowGolemInteract((SnowGolemEntity) (Object) this)) {
|
||||||
|
info.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -23,7 +23,10 @@
|
|||||||
"FireBlockMixin",
|
"FireBlockMixin",
|
||||||
"SpawnHelperMixin",
|
"SpawnHelperMixin",
|
||||||
"PlayerMixin",
|
"PlayerMixin",
|
||||||
"ItemEntityMixin"
|
"ItemEntityMixin",
|
||||||
|
"EndermanPickupMixin",
|
||||||
|
"EndermanPlaceMixin",
|
||||||
|
"SnowGolemMixin"
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
],
|
],
|
||||||
|
Loading…
Reference in New Issue
Block a user