Skip to content

Commit

Permalink
Refactor variables getting
Browse files Browse the repository at this point in the history
  • Loading branch information
imDaniX committed Feb 12, 2024
1 parent 331dbbf commit b4194e7
Show file tree
Hide file tree
Showing 15 changed files with 181 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import fun.reactions.util.message.RaDebug;
import fun.reactions.util.mob.EntityUtils;
import fun.reactions.util.mob.MobSpawn;
import fun.reactions.util.num.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
Expand All @@ -46,7 +45,6 @@
import org.bukkit.metadata.FixedMetadataValue;

import java.util.List;
import java.util.Optional;

import static fun.reactions.module.basic.ContextManager.*;
import static fun.reactions.module.basic.ItemContextManager.triggerItemHold;
Expand Down Expand Up @@ -78,14 +76,14 @@ public void onAttackEvent(EntityDamageByEntityEvent event) {

@EventHandler(ignoreCancelled = true)
public void onTeleport(PlayerTeleportEvent event) {
Optional<Variables> optVars = triggerTeleport(
var optVars = triggerTeleport(
event.getPlayer(),
event.getCause(),
event.getTo());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.getChanged(TeleportActivator.Context.LOCATION_TO, LocationUtils::parseLocation).ifPresent(event::setTo);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
vars.changed(TeleportActivator.Context.LOCATION_TO, LocationUtils::parseLocation).ifPresent(event::setTo);
}

@EventHandler
Expand All @@ -100,13 +98,13 @@ public void onInteractAtEntity(PlayerInteractAtEntityEvent event) {
public void onChat(AsyncPlayerChatEvent event) {
// TODO: That's not really good solution
try {
Optional<Variables> optVars = triggerMessage(event.getPlayer(),
var optVars = triggerMessage(event.getPlayer(),
MessageActivator.Source.CHAT_INPUT,
event.getMessage());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.getChanged(MessageActivator.Context.MESSAGE).ifPresent(event::setMessage);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
vars.changedString(MessageActivator.Context.MESSAGE).ifPresent(event::setMessage);
// TODO: setFormat
} catch (IllegalStateException ignore) {
Msg.logOnce("asyncchaterror", "Chat is in async thread. Because of that you should use " +
Expand Down Expand Up @@ -230,11 +228,11 @@ public void onMobGrowl(PlayerAttacksEntityEvent event) {

@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onMobDamageByPlayer(PlayerAttacksEntityEvent event) {
Optional<Variables> optVars = triggerMobDamage(event.getPlayer(), event.getEntity(), event.getDamage(), event.getFinalDamage(), event.getCause());
var optVars = triggerMobDamage(event.getPlayer(), event.getEntity(), event.getDamage(), event.getFinalDamage(), event.getCause());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.getChanged(MobDamageActivator.MobDamageContext.DAMAGE, NumberUtils::asDouble).ifPresent(event::setDamage);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
vars.changedDouble(MobDamageActivator.MobDamageContext.DAMAGE).ifPresent(event::setDamage);
}

@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
Expand All @@ -253,32 +251,32 @@ public void onPlayerDamage(EntityDamageEvent event) {
String source;
if (event instanceof EntityDamageByEntityEvent evdmg) {
source = "ENTITY";
Optional<Variables> optVars = triggerDamageByMob(evdmg);;
var optVars = triggerDamageByMob(evdmg);;
if (optVars.isPresent()) {
Variables vars = optVars.get();
vars.getChanged(DamageActivator.Context.DAMAGE, NumberUtils::asDouble).ifPresent(event::setDamage);
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.changedDouble(DamageActivator.Context.DAMAGE).ifPresent(event::setDamage);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}
} else if (event instanceof EntityDamageByBlockEvent evdmg) {
source = "BLOCK";
Block blockDamager = evdmg.getDamager();
if (blockDamager != null) {
Optional<Variables> optVars = triggerDamageByBlock(evdmg, blockDamager);
var optVars = triggerDamageByBlock(evdmg, blockDamager);
if (optVars.isPresent()) {
Variables vars = optVars.get();
vars.getChanged(DamageActivator.Context.DAMAGE, NumberUtils::asDouble).ifPresent(event::setDamage);
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.changedDouble(DamageActivator.Context.DAMAGE).ifPresent(event::setDamage);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}
}
} else {
source = "OTHER";
}

Optional<Variables> optVars = triggerDamage(event, source);
var optVars = triggerDamage(event, source);
if (optVars.isPresent()) {
Variables vars = optVars.get();
vars.getChanged(DamageActivator.Context.DAMAGE, NumberUtils::asDouble).ifPresent(event::setDamage);
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.changedDouble(DamageActivator.Context.DAMAGE).ifPresent(event::setDamage);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}
}

Expand Down Expand Up @@ -361,21 +359,21 @@ public void onPlayerTeleport(PlayerTeleportEvent event) {

@EventHandler(ignoreCancelled = true)
public void onInventoryClick(InventoryClickEvent event) {
Optional<Variables> optVars = triggerInventoryClick(event);
var optVars = triggerInventoryClick(event);
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(InventoryClickActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent(event::setCurrentItem);
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.changed(InventoryClickActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent(event::setCurrentItem);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}

@EventHandler(ignoreCancelled = true)
public void onDrop(PlayerDropItemEvent event) {
Optional<Variables> optVars = triggerDrop(event.getPlayer(), event.getItemDrop(), event.getItemDrop().getPickupDelay());
var optVars = triggerDrop(event.getPlayer(), event.getItemDrop(), event.getItemDrop().getPickupDelay());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.getChanged(DropActivator.Context.PICKUP_DELAY, NumberUtils::asInteger).ifPresent((d) -> event.getItemDrop().setPickupDelay(d));
vars.getChanged(DropActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent((i) -> event.getItemDrop().setItemStack(i));
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
vars.changedInt(DropActivator.Context.PICKUP_DELAY).ifPresent((d) -> event.getItemDrop().setPickupDelay(d));
vars.changed(DropActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent((i) -> event.getItemDrop().setItemStack(i));
}

@EventHandler(ignoreCancelled = true)
Expand All @@ -392,11 +390,11 @@ public void onEntityClick(PlayerInteractEntityEvent event) {

@EventHandler(ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Optional<Variables> optVars = triggerBlockBreak(event.getPlayer(), event.getBlock(), event.isDropItems());
var optVars = triggerBlockBreak(event.getPlayer(), event.getBlock(), event.isDropItems());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(BlockBreakActivator.Context.DO_DROP, Boolean::parseBoolean).ifPresent(event::setDropItems);
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::parseBoolean).ifPresent(event::setCancelled);
vars.changedBoolean(BlockBreakActivator.Context.DO_DROP).ifPresent(event::setDropItems);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}

@EventHandler(ignoreCancelled = true)
Expand All @@ -407,8 +405,8 @@ public void onSneak(PlayerToggleSneakEvent event) {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
TemporaryOp.removeOp(event.getPlayer());
Optional<Variables> optVars = triggerQuit(event);
optVars.flatMap(variables -> variables.getChanged(QuitActivator.Context.QUIT_MESSAGE)).ifPresent(event::setQuitMessage);
var optVars = triggerQuit(event);
optVars.flatMap(variables -> variables.changedString(QuitActivator.Context.QUIT_MESSAGE)).ifPresent(event::setQuitMessage);
MoveListener.removeLocation(event.getPlayer());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import fun.reactions.module.basic.ItemContextManager;
import fun.reactions.module.basic.activators.DropActivator;
import fun.reactions.util.item.VirtualItem;
import fun.reactions.util.num.NumberUtils;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

Expand All @@ -33,9 +32,9 @@ public void onPickup(PlayerPickupItemEvent event) {
Optional<Variables> optVars = ContextManager.triggerPickupItem(event.getPlayer(), event.getItem(), event.getItem().getPickupDelay());
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.getChanged(DropActivator.Context.PICKUP_DELAY, NumberUtils::asInteger).ifPresent((d) -> event.getItem().setPickupDelay(d));
vars.getChanged(DropActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent((i) -> event.getItem().setItemStack(i));
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
vars.changedInt(DropActivator.Context.PICKUP_DELAY).ifPresent((d) -> event.getItem().setPickupDelay(d));
vars.changed(DropActivator.Context.ITEM, VirtualItem::asItemStack).ifPresent((i) -> event.getItem().setItemStack(i));
if (event.isCancelled()) return;
ItemContextManager.triggerItemHold(event.getPlayer());
ItemContextManager.triggerItemWear(event.getPlayer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,6 @@ public final boolean isAsync() {
}

public boolean isCancelled() {
return variables != null && variables.getChanged(CANCEL_EVENT, Boolean::valueOf).orElse(false);
return variables != null && variables.changedBoolean(CANCEL_EVENT).orElse(false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public interface Variable {
}

@Override
public @NotNull Optional<String> getChanged() {
public @NotNull Optional<String> changed() {
return Optional.empty();
}

Expand All @@ -33,7 +33,7 @@ public interface Variable {

@NotNull Variable set(@NotNull String value);

@NotNull Optional<String> getChanged();
@NotNull Optional<String> changed();

@NotNull Variable fork();

Expand Down Expand Up @@ -86,7 +86,7 @@ public Simple(@NotNull String value) {
}

@Override
public @NotNull Optional<String> getChanged() {
public @NotNull Optional<String> changed() {
return Optional.of(value);
}

Expand Down Expand Up @@ -119,7 +119,7 @@ public Property(@NotNull String value) {
}

@Override
public @NotNull Optional<String> getChanged() {
public @NotNull Optional<String> changed() {
return optional;
}

Expand Down Expand Up @@ -147,7 +147,7 @@ public Lazy(@NotNull SafeSupplier<String> getter) {
}

@Override
public @NotNull Optional<String> getChanged() {
public @NotNull Optional<String> changed() {
return Optional.empty();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package fun.reactions.model.environment;

import fun.reactions.util.bool.OptionalBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.num.NumberUtils;
import fun.reactions.util.parameter.Parameters;
import org.bukkit.configuration.ConfigurationSection;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.UnmodifiableView;

import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.*;
import java.util.function.*;

public class Variables {
private final Map<String, Variable> variables;
Expand Down Expand Up @@ -78,12 +76,44 @@ public Variables() {
return vari == null ? null : vari.get();
}

public @NotNull Optional<String> getChanged(@NotNull String key) {
return variables.getOrDefault(key.toLowerCase(Locale.ROOT), Variable.EMPTY).getChanged();
public <T> @NotNull Optional<T> changed(@NotNull String key, @NotNull Function<String, T> funct) {
return changedString(key).map(funct);
}

public <T> @NotNull Optional<T> getChanged(@NotNull String key, @NotNull Function<String, T> funct) {
return getChanged(key).map(funct);
public @NotNull Optional<String> changedString(@NotNull String key) {
return variables.getOrDefault(key.toLowerCase(Locale.ROOT), Variable.EMPTY).changed();
}

public @NotNull OptionalBoolean changedBoolean(@NotNull String key) {
return changedString(key).map(s -> TriBoolean.byString(s).asOptional()).orElse(OptionalBoolean.EMPTY);
}

public @NotNull OptionalBoolean changedBoolean(@NotNull String key, @NotNull Predicate<@NotNull String> funct) {
return changedString(key).map(s -> OptionalBoolean.of(funct.test(s))).orElse(OptionalBoolean.EMPTY);
}

public @NotNull OptionalInt changedInt(@NotNull String key) {
return changedString(key).map(NumberUtils::parseInteger).orElse(OptionalInt.empty());
}

public @NotNull OptionalInt changedInt(@NotNull String key, @NotNull ToIntFunction<@NotNull String> funct) {
return changedString(key).map(s -> OptionalInt.of(funct.applyAsInt(s))).orElse(OptionalInt.empty());
}

public @NotNull OptionalLong changedLong(@NotNull String key) {
return changedString(key).map(NumberUtils::parseLong).orElse(OptionalLong.empty());
}

public @NotNull OptionalLong changedLong(@NotNull String key, @NotNull ToLongFunction<@NotNull String> funct) {
return changedString(key).map(s -> OptionalLong.of(funct.applyAsLong(s))).orElse(OptionalLong.empty());
}

public @NotNull OptionalDouble changedDouble(@NotNull String key) {
return changedString(key).map(NumberUtils::parseDouble).orElse(OptionalDouble.empty());
}

public @NotNull OptionalDouble changedDouble(@NotNull String key, @NotNull ToDoubleFunction<@NotNull String> funct) {
return changedString(key).map(s -> OptionalDouble.of(funct.applyAsDouble(s))).orElse(OptionalDouble.empty());
}

public void set(@NotNull String key, @Nullable String value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ public Context(Player p, Block block, boolean leftClick) {
return Map.of(
CANCEL_EVENT, Variable.property(false),
"blocklocation", simple(LocationUtils.locationToString(block.getLocation())),
"blocktype", Variable.simple(block.getType()),
"block", Variable.simple(block.getType()) // FIXME Why there is a copy?
"blocktype", simple(block.getType()),
"block", simple(block.getType()) // FIXME Why there is a copy?
);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import fun.reactions.model.activators.Locatable;
import fun.reactions.model.environment.Variable;
import fun.reactions.util.BlockUtils;
import fun.reactions.util.enums.TriBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.location.LocationUtils;
import fun.reactions.util.location.position.ImplicitPosition;
import fun.reactions.util.parameter.BlockParameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import fun.reactions.model.activators.ActivationContext;
import fun.reactions.model.activators.Activator;
import fun.reactions.model.environment.Variable;
import fun.reactions.util.enums.TriBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.parameter.Parameters;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import fun.reactions.model.Logic;
import fun.reactions.model.activators.ActivationContext;
import fun.reactions.model.activators.Activator;
import fun.reactions.util.enums.TriBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.parameter.Parameters;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import fun.reactions.model.activators.Activator;
import fun.reactions.model.activators.Locatable;
import fun.reactions.model.environment.Variable;
import fun.reactions.util.enums.TriBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.location.position.ImplicitPosition;
import fun.reactions.util.parameter.BlockParameters;
import fun.reactions.util.parameter.Parameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import fun.reactions.model.activators.ActivationContext;
import fun.reactions.model.activators.Activator;
import fun.reactions.model.environment.Variable;
import fun.reactions.util.enums.TriBoolean;
import fun.reactions.util.bool.TriBoolean;
import fun.reactions.util.parameter.Parameters;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public void onPacketSending(PacketEvent event) {
Optional<Variables> optVars = ContextManager.triggerMessage(event.getPlayer(), MessageActivator.Source.CHAT_OUTPUT, message);
if (optVars.isEmpty()) return;
Variables vars = optVars.get();
vars.getChanged(ActivationContext.CANCEL_EVENT, Boolean::valueOf).ifPresent(event::setCancelled);
vars.changedBoolean(ActivationContext.CANCEL_EVENT).ifPresent(event::setCancelled);
}
}
}
Loading

0 comments on commit b4194e7

Please sign in to comment.