package net.t7seven7t.util.intake.module; import com.google.common.reflect.TypeToken; import com.sk89q.intake.parametric.AbstractModule; import com.sk89q.intake.parametric.Key; import net.t7seven7t.util.intake.module.annotation.Milliseconds; import net.t7seven7t.util.intake.module.annotation.Sender; import net.t7seven7t.util.intake.module.annotation.Ticks; import net.t7seven7t.util.intake.module.provider.CommandSenderProvider; import net.t7seven7t.util.intake.module.provider.PlayerArgumentProvider; import net.t7seven7t.util.intake.module.provider.PlayerSenderProvider; import net.t7seven7t.util.intake.module.provider.TimeProvider; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.List; /** * */ public class BukkitModule extends AbstractModule { private static final Key<List<Player>> PLAYER_KEY = Key.get(new TypeToken<List<Player>>() { }.getType()); @Override public void configure() { bind(PLAYER_KEY).toProvider(new PlayerArgumentProvider<>(list -> list)); // list size always >= 1; see PlayerArgumentProvider spec bind(Player.class).toProvider(new PlayerArgumentProvider<>(list -> list.get(0))); bind(Player.class).annotatedWith(Sender.class).toProvider(new PlayerSenderProvider()); bind(CommandSender.class).toProvider(new CommandSenderProvider()); bind(Long.class).annotatedWith(Ticks.class) .toProvider(new TimeProvider(millis -> millis / 50L)); bind(Long.class).annotatedWith(Milliseconds.class) .toProvider(new TimeProvider(millis -> millis)); } }