change locking drops to a permission
This commit is contained in:
parent
57e03502de
commit
731de0949b
@ -3,6 +3,8 @@ Flan 1.6.1
|
|||||||
- Improve performance
|
- Improve performance
|
||||||
- Support for Money and Sign Shops currency (forge)
|
- Support for Money and Sign Shops currency (forge)
|
||||||
- Fix unusable admin cmd with FTBRanks if its not defined in Ranks
|
- Fix unusable admin cmd with FTBRanks if its not defined in Ranks
|
||||||
|
- Change lockItems config to a permission
|
||||||
|
Global default is ALLTRUE
|
||||||
|
|
||||||
Flan 1.6.0
|
Flan 1.6.0
|
||||||
======================
|
======================
|
||||||
|
@ -85,6 +85,7 @@ public class PermissionRegistry {
|
|||||||
public static ClaimPermission MOBSPAWN = global(new ClaimPermission("MOBSPAWN", () -> new ItemStack(Items.ZOMBIE_SPAWN_EGG), "Prevent hostile mobspawn in claim"));
|
public static ClaimPermission MOBSPAWN = global(new ClaimPermission("MOBSPAWN", () -> new ItemStack(Items.ZOMBIE_SPAWN_EGG), "Prevent hostile mobspawn in claim"));
|
||||||
public static ClaimPermission ANIMALSPAWN = global(new ClaimPermission("ANIMALSPAWN", () -> new ItemStack(Items.PIG_SPAWN_EGG), "Prevent other spawn in claim"));
|
public static ClaimPermission ANIMALSPAWN = global(new ClaimPermission("ANIMALSPAWN", () -> new ItemStack(Items.PIG_SPAWN_EGG), "Prevent other spawn in claim"));
|
||||||
public static ClaimPermission LIGHTNING = global(new ClaimPermission("LIGHTNING", () -> new ItemStack(Items.TRIDENT), "Allow lightning to affect claims", "e.g. set blocks on fire", "or affect animals (mobs are excluded)"));
|
public static ClaimPermission LIGHTNING = global(new ClaimPermission("LIGHTNING", () -> new ItemStack(Items.TRIDENT), "Allow lightning to affect claims", "e.g. set blocks on fire", "or affect animals (mobs are excluded)"));
|
||||||
|
public static ClaimPermission LOCKITEMS = global(new ClaimPermission("LOCKITEMS", () -> new ItemStack(Items.FIREWORK_STAR), true, "If items should be locked on death"));
|
||||||
|
|
||||||
private static ClaimPermission register(ClaimPermission perm) {
|
private static ClaimPermission register(ClaimPermission perm) {
|
||||||
if (locked) {
|
if (locked) {
|
||||||
|
@ -13,7 +13,6 @@ import io.github.flemmli97.flan.api.permission.ClaimPermission;
|
|||||||
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
|
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
|
||||||
import io.github.flemmli97.flan.config.Config;
|
import io.github.flemmli97.flan.config.Config;
|
||||||
import io.github.flemmli97.flan.config.ConfigHandler;
|
import io.github.flemmli97.flan.config.ConfigHandler;
|
||||||
import io.github.flemmli97.flan.config.ConfigUpdater;
|
|
||||||
import io.github.flemmli97.flan.player.PlayerClaimData;
|
import io.github.flemmli97.flan.player.PlayerClaimData;
|
||||||
import net.minecraft.entity.effect.StatusEffect;
|
import net.minecraft.entity.effect.StatusEffect;
|
||||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
@ -103,7 +102,7 @@ public class Claim implements IPermissionContainer {
|
|||||||
public static Claim fromJson(JsonObject obj, UUID owner, ServerWorld world) {
|
public static Claim fromJson(JsonObject obj, UUID owner, ServerWorld world) {
|
||||||
Claim claim = new Claim(world);
|
Claim claim = new Claim(world);
|
||||||
claim.readJson(obj, owner);
|
claim.readJson(obj, owner);
|
||||||
ConfigUpdater.updateClaim(claim);
|
ClaimUpdater.updateClaim(claim);
|
||||||
return claim;
|
return claim;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,4 +726,18 @@ public class Claim implements IPermissionContainer {
|
|||||||
GLOBAL,
|
GLOBAL,
|
||||||
GROUP
|
GROUP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ClaimUpdater {
|
||||||
|
|
||||||
|
Map<Integer, ClaimUpdater> updater = Config.createHashMap(map -> {
|
||||||
|
map.put(2, claim -> claim.globalPerm.put(PermissionRegistry.LOCKITEMS, true));
|
||||||
|
});
|
||||||
|
|
||||||
|
static void updateClaim(Claim claim) {
|
||||||
|
updater.entrySet().stream().filter(e -> e.getKey() > ConfigHandler.config.preConfigVersion).map(Map.Entry::getValue)
|
||||||
|
.forEach(up -> up.update(claim));
|
||||||
|
}
|
||||||
|
|
||||||
|
void update(Claim claim);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,6 @@ public class Config {
|
|||||||
public int sellPrice = -1;
|
public int sellPrice = -1;
|
||||||
public int buyPrice = -1;
|
public int buyPrice = -1;
|
||||||
|
|
||||||
public boolean lockDrops = true;
|
|
||||||
public int dropTicks = 6000;
|
public int dropTicks = 6000;
|
||||||
|
|
||||||
public int inactivityTime = 30;
|
public int inactivityTime = 30;
|
||||||
@ -67,7 +66,7 @@ public class Config {
|
|||||||
|
|
||||||
public boolean log;
|
public boolean log;
|
||||||
|
|
||||||
public int configVersion = 1;
|
public int configVersion = 2;
|
||||||
public int preConfigVersion;
|
public int preConfigVersion;
|
||||||
|
|
||||||
public Map<String, Map<ClaimPermission, Boolean>> defaultGroups = createHashMap(map -> {
|
public Map<String, Map<ClaimPermission, Boolean>> defaultGroups = createHashMap(map -> {
|
||||||
@ -87,12 +86,13 @@ public class Config {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
private final Map<String, Map<ClaimPermission, GlobalType>> globalDefaultPerms = createHashMap(map -> map.put("*", createHashMap(perms -> {
|
protected final Map<String, Map<ClaimPermission, GlobalType>> globalDefaultPerms = createHashMap(map -> map.put("*", createHashMap(perms -> {
|
||||||
perms.put(PermissionRegistry.FLIGHT, GlobalType.ALLTRUE);
|
perms.put(PermissionRegistry.FLIGHT, GlobalType.ALLTRUE);
|
||||||
perms.put(PermissionRegistry.MOBSPAWN, GlobalType.ALLFALSE);
|
perms.put(PermissionRegistry.MOBSPAWN, GlobalType.ALLFALSE);
|
||||||
perms.put(PermissionRegistry.TELEPORT, GlobalType.ALLFALSE);
|
perms.put(PermissionRegistry.TELEPORT, GlobalType.ALLFALSE);
|
||||||
perms.put(PermissionRegistry.NOHUNGER, GlobalType.ALLFALSE);
|
perms.put(PermissionRegistry.NOHUNGER, GlobalType.ALLFALSE);
|
||||||
perms.put(PermissionRegistry.EDITPOTIONS, GlobalType.ALLFALSE);
|
perms.put(PermissionRegistry.EDITPOTIONS, GlobalType.ALLFALSE);
|
||||||
|
perms.put(PermissionRegistry.LOCKITEMS, GlobalType.ALLTRUE);
|
||||||
})));
|
})));
|
||||||
|
|
||||||
public Config(MinecraftServer server) {
|
public Config(MinecraftServer server) {
|
||||||
@ -178,7 +178,6 @@ public class Config {
|
|||||||
this.permissionLevel = ConfigHandler.fromJson(obj, "permissionLevel", this.permissionLevel);
|
this.permissionLevel = ConfigHandler.fromJson(obj, "permissionLevel", this.permissionLevel);
|
||||||
this.sellPrice = ConfigHandler.fromJson(obj, "sellPrice", this.sellPrice);
|
this.sellPrice = ConfigHandler.fromJson(obj, "sellPrice", this.sellPrice);
|
||||||
this.buyPrice = ConfigHandler.fromJson(obj, "buyPrice", this.buyPrice);
|
this.buyPrice = ConfigHandler.fromJson(obj, "buyPrice", this.buyPrice);
|
||||||
this.lockDrops = ConfigHandler.fromJson(obj, "lockDrops", this.lockDrops);
|
|
||||||
this.dropTicks = ConfigHandler.fromJson(obj, "dropTicks", this.dropTicks);
|
this.dropTicks = ConfigHandler.fromJson(obj, "dropTicks", this.dropTicks);
|
||||||
this.inactivityTime = ConfigHandler.fromJson(obj, "inactivityTimeDays", this.inactivityTime);
|
this.inactivityTime = ConfigHandler.fromJson(obj, "inactivityTimeDays", this.inactivityTime);
|
||||||
this.inactivityBlocksMax = ConfigHandler.fromJson(obj, "inactivityBlocksMax", this.inactivityBlocksMax);
|
this.inactivityBlocksMax = ConfigHandler.fromJson(obj, "inactivityBlocksMax", this.inactivityBlocksMax);
|
||||||
@ -238,7 +237,6 @@ public class Config {
|
|||||||
obj.addProperty("enableLogs", this.log);
|
obj.addProperty("enableLogs", this.log);
|
||||||
obj.addProperty("sellPrice", this.sellPrice);
|
obj.addProperty("sellPrice", this.sellPrice);
|
||||||
obj.addProperty("buyPrice", this.buyPrice);
|
obj.addProperty("buyPrice", this.buyPrice);
|
||||||
obj.addProperty("lockDrops", this.lockDrops);
|
|
||||||
obj.addProperty("dropTicks", this.dropTicks);
|
obj.addProperty("dropTicks", this.dropTicks);
|
||||||
obj.addProperty("inactivityTimeDays", this.inactivityTime);
|
obj.addProperty("inactivityTimeDays", this.inactivityTime);
|
||||||
obj.addProperty("inactivityBlocksMax", this.inactivityBlocksMax);
|
obj.addProperty("inactivityBlocksMax", this.inactivityBlocksMax);
|
||||||
|
@ -1,13 +1,24 @@
|
|||||||
package io.github.flemmli97.flan.config;
|
package io.github.flemmli97.flan.config;
|
||||||
|
|
||||||
import io.github.flemmli97.flan.claim.Claim;
|
import io.github.flemmli97.flan.Flan;
|
||||||
|
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ConfigUpdater {
|
public class ConfigUpdater {
|
||||||
|
|
||||||
private static final Map<Integer, Updater> updater = Config.createHashMap(map -> {
|
private static final Map<Integer, Updater> updater = Config.createHashMap(map -> {
|
||||||
|
map.put(2, () -> {
|
||||||
|
Flan.debug("Updating config to version 2");
|
||||||
|
ConfigHandler.config.globalDefaultPerms.compute("*", (k, v) -> {
|
||||||
|
if (v == null) {
|
||||||
|
return Config.createHashMap(map1 -> map1.put(PermissionRegistry.LOCKITEMS, Config.GlobalType.ALLTRUE));
|
||||||
|
} else {
|
||||||
|
v.put(PermissionRegistry.LOCKITEMS, Config.GlobalType.ALLTRUE);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
public static void updateConfig(int preVersion) {
|
public static void updateConfig(int preVersion) {
|
||||||
@ -15,16 +26,9 @@ public class ConfigUpdater {
|
|||||||
.forEach(Updater::configUpdater);
|
.forEach(Updater::configUpdater);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateClaim(Claim claim) {
|
|
||||||
updater.entrySet().stream().filter(e -> e.getKey() > ConfigHandler.config.preConfigVersion).map(Map.Entry::getValue)
|
|
||||||
.forEach(up -> up.claimUpdater(claim));
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Updater {
|
interface Updater {
|
||||||
|
|
||||||
void configUpdater();
|
void configUpdater();
|
||||||
|
|
||||||
void claimUpdater(Claim claim);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -228,7 +228,7 @@ public class EntityInteractEvents {
|
|||||||
ServerPlayerEntity sPlayer = (ServerPlayerEntity) player;
|
ServerPlayerEntity sPlayer = (ServerPlayerEntity) player;
|
||||||
if (entity instanceof ItemEntity) {
|
if (entity instanceof ItemEntity) {
|
||||||
IOwnedItem ownedItem = (IOwnedItem) entity;
|
IOwnedItem ownedItem = (IOwnedItem) entity;
|
||||||
if (ownedItem.getDeathPlayer() != null && ConfigHandler.config.lockDrops) {
|
if (ownedItem.getDeathPlayer() != null) {
|
||||||
ServerPlayerEntity other = sPlayer.getServer().getPlayerManager().getPlayer(ownedItem.getDeathPlayer());
|
ServerPlayerEntity other = sPlayer.getServer().getPlayerManager().getPlayer(ownedItem.getDeathPlayer());
|
||||||
if (other == null)
|
if (other == null)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package io.github.flemmli97.flan.mixin;
|
package io.github.flemmli97.flan.mixin;
|
||||||
|
|
||||||
import io.github.flemmli97.flan.player.IOwnedItem;
|
import io.github.flemmli97.flan.player.IOwnedItem;
|
||||||
|
import io.github.flemmli97.flan.player.PlayerClaimData;
|
||||||
import net.minecraft.entity.ItemEntity;
|
import net.minecraft.entity.ItemEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@ -35,7 +37,7 @@ public abstract class ItemEntityMixin implements IOwnedItem {
|
|||||||
@Override
|
@Override
|
||||||
public void setOriginPlayer(PlayerEntity player) {
|
public void setOriginPlayer(PlayerEntity player) {
|
||||||
this.playerOrigin = player.getUuid();
|
this.playerOrigin = player.getUuid();
|
||||||
if (player.isDead())
|
if (player instanceof ServerPlayerEntity && PlayerClaimData.get((ServerPlayerEntity) player).setDeathItemOwner())
|
||||||
this.deathPlayerOrigin = this.playerOrigin;
|
this.deathPlayerOrigin = this.playerOrigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +75,8 @@ public class PlayerClaimData implements IPlayerData {
|
|||||||
|
|
||||||
private final Map<String, Map<ClaimPermission, Boolean>> defaultGroups = new HashMap<>();
|
private final Map<String, Map<ClaimPermission, Boolean>> defaultGroups = new HashMap<>();
|
||||||
|
|
||||||
|
private boolean shouldProtectDrop, calculateShouldDrop = true;
|
||||||
|
|
||||||
public PlayerClaimData(ServerPlayerEntity player) {
|
public PlayerClaimData(ServerPlayerEntity player) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.claimBlocks = ConfigHandler.config.startingBlocks;
|
this.claimBlocks = ConfigHandler.config.startingBlocks;
|
||||||
@ -320,6 +322,8 @@ public class PlayerClaimData implements IPlayerData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.deathPickupTick--;
|
this.deathPickupTick--;
|
||||||
|
if (!this.player.isDead())
|
||||||
|
this.calculateShouldDrop = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unlockDeathItems() {
|
public void unlockDeathItems() {
|
||||||
@ -335,7 +339,7 @@ public class PlayerClaimData implements IPlayerData {
|
|||||||
this.additionalClaimBlocks = data.additionalClaimBlocks;
|
this.additionalClaimBlocks = data.additionalClaimBlocks;
|
||||||
this.defaultGroups.clear();
|
this.defaultGroups.clear();
|
||||||
this.defaultGroups.putAll(data.defaultGroups);
|
this.defaultGroups.putAll(data.defaultGroups);
|
||||||
if (ConfigHandler.config.lockDrops)
|
if (data.setDeathItemOwner())
|
||||||
this.player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.unlockDropsCmd, "/flan unlockDrops"), Formatting.GOLD), false);
|
this.player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.unlockDropsCmd, "/flan unlockDrops"), Formatting.GOLD), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,6 +375,18 @@ public class PlayerClaimData implements IPlayerData {
|
|||||||
return usedClaimsBlocks;
|
return usedClaimsBlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean setDeathItemOwner() {
|
||||||
|
if (!this.player.isDead())
|
||||||
|
return false;
|
||||||
|
if (this.calculateShouldDrop) {
|
||||||
|
BlockPos rounded = TeleportUtils.roundedBlockPos(this.player.getPos().add(0, this.player.getActiveEyeHeight(this.player.getPose(), this.player.getDimensions(this.player.getPose())), 0));
|
||||||
|
this.shouldProtectDrop = ClaimStorage.get(this.player.getServerWorld()).getForPermissionCheck(rounded)
|
||||||
|
.canInteract(this.player, PermissionRegistry.LOCKITEMS, rounded);
|
||||||
|
this.calculateShouldDrop = false;
|
||||||
|
}
|
||||||
|
return this.shouldProtectDrop;
|
||||||
|
}
|
||||||
|
|
||||||
public void save(MinecraftServer server) {
|
public void save(MinecraftServer server) {
|
||||||
Flan.log("Saving player data for player {} with uuid {}", this.player.getName(), this.player.getUuid());
|
Flan.log("Saving player data for player {} with uuid {}", this.player.getName(), this.player.getUuid());
|
||||||
Path dir = ConfigHandler.getPlayerSavePath(server);
|
Path dir = ConfigHandler.getPlayerSavePath(server);
|
||||||
|
Loading…
Reference in New Issue
Block a user