diff --git a/build.gradle b/build.gradle index 265cfe3..6abb332 100644 --- a/build.gradle +++ b/build.gradle @@ -44,7 +44,7 @@ repositories { dependencies { compile group: 'net.sf.trove4j', name: 'trove4j', version: '3.0.3' compile 'com.github.IzzelAliz:AmberCommon:master-SNAPSHOT' - shadow 'com.github.euOnmyoji:EpicBanItem---Sponge:0.3.3:pure' + shadow 'com.github.EpicBanItemTeam:EpicBanItem:0.4.0:pure' shadow 'org.spongepowered:spongeapi:7.1.0' shadow 'org.spongepowered:spongecommon:7.1.0:dev' shadow 'org.projectlombok:lombok:1.18.2' diff --git a/src/main/java/io/izzel/ambershop/AmberShop.java b/src/main/java/io/izzel/ambershop/AmberShop.java index 54b3e9a..ce5ee49 100644 --- a/src/main/java/io/izzel/ambershop/AmberShop.java +++ b/src/main/java/io/izzel/ambershop/AmberShop.java @@ -16,8 +16,9 @@ import org.spongepowered.api.Sponge; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.event.Listener; +import org.spongepowered.api.event.Order; import org.spongepowered.api.event.game.GameReloadEvent; -import org.spongepowered.api.event.game.state.GameInitializationEvent; +import org.spongepowered.api.event.game.state.GamePreInitializationEvent; import org.spongepowered.api.event.game.state.GameStartingServerEvent; import org.spongepowered.api.event.game.state.GameStoppingEvent; import org.spongepowered.api.plugin.Dependency; @@ -56,8 +57,8 @@ public AmberShop(Injector injector) { @Inject private Updater updater; @Inject private AmberLocale locale; - @Listener - public void onGameInit(GameInitializationEvent event) { + @Listener(order = Order.LATE) + public void onPreInit(GamePreInitializationEvent event) { INJECTOR.getInstance(EbiModule.class); } diff --git a/src/main/java/io/izzel/ambershop/conf/AmberConf.java b/src/main/java/io/izzel/ambershop/conf/AmberConf.java index dbe4286..b23ccbc 100644 --- a/src/main/java/io/izzel/ambershop/conf/AmberConf.java +++ b/src/main/java/io/izzel/ambershop/conf/AmberConf.java @@ -65,7 +65,7 @@ public static class Tax { @ConfigSerializable public static class Ebi { - @Setting(comment = "Enable item blacklist using EpicBanItem, requires version >= 0.3.2.") + @Setting(comment = "Enable item blacklist using EpicBanItem, requires version >= 0.4.0.") public boolean enable = false; @Setting(comment = "Check EBI when creating a shop.") diff --git a/src/main/java/io/izzel/ambershop/module/EbiModule.java b/src/main/java/io/izzel/ambershop/module/EbiModule.java index 3b7f3b1..b83178b 100644 --- a/src/main/java/io/izzel/ambershop/module/EbiModule.java +++ b/src/main/java/io/izzel/ambershop/module/EbiModule.java @@ -1,16 +1,23 @@ package io.izzel.ambershop.module; -import com.github.euonmyoji.epicbanitem.api.CheckRuleService; -import com.github.euonmyoji.epicbanitem.api.CheckRuleTrigger; +import com.google.common.reflect.TypeToken; import com.google.inject.Inject; import com.google.inject.Singleton; +import io.izzel.amber.commons.i18n.AmberLocale; +import io.izzel.ambershop.AmberShop; import io.izzel.ambershop.conf.AmberConfManager; import lombok.SneakyThrows; import lombok.val; import org.slf4j.Logger; +import org.spongepowered.api.Sponge; +import org.spongepowered.api.event.game.GameRegistryEvent; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.service.permission.Subject; +import org.spongepowered.api.text.Text; +import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.api.world.World; +import team.ebi.epicbanitem.api.CheckRuleService; +import team.ebi.epicbanitem.api.CheckRuleTrigger; @Singleton public class EbiModule { @@ -18,10 +25,10 @@ public class EbiModule { private final EbiInterface impl; @Inject - public EbiModule(AmberConfManager acm, Logger logger) { + public EbiModule(AmberConfManager acm, AmberLocale locale, Logger logger) { val ebi = acm.get().shopSettings.blacklistSettings; if (ebi.enable && checkEbiVersion(logger)) { - impl = new EbiImpl(ebi.checkCreate, ebi.checkTrade); + impl = new EbiImpl(locale ,ebi.checkCreate, ebi.checkTrade); logger.info("Using EpicBanItem for item blacklist."); } else { impl = new AbstractImpl(); @@ -30,10 +37,10 @@ public EbiModule(AmberConfManager acm, Logger logger) { private boolean checkEbiVersion(Logger logger) { try { - Class.forName("com.github.euonmyoji.epicbanitem.api.CheckRuleService"); + Class.forName("team.ebi.epicbanitem.api.CheckRuleService"); return true; } catch (Exception e) { - logger.error("Item blacklist module requires EpicBanItem 0.3.2+ ."); + logger.error("Item blacklist module requires EpicBanItem 0.4.0+ ."); return false; } } @@ -74,12 +81,18 @@ private static class EbiImpl implements EbiInterface { private final CheckRuleTrigger tradeTrigger; @SneakyThrows - public EbiImpl(boolean create, boolean trade) { + public EbiImpl(AmberLocale locale, boolean create, boolean trade) { this.create = create; this.trade = trade; - service = CheckRuleService.instance(); - createTrigger = service.getTrigger("as_create", true).orElseThrow(Exception::new); - tradeTrigger = service.getTrigger("as_trade", true).orElseThrow(Exception::new); + service = Sponge.getServiceManager().provideUnchecked(CheckRuleService.class); + Sponge.getEventManager().registerListener(AmberShop.SINGLETON, new TypeToken>() {}, this::onRegistryTrigger); + createTrigger = new TriggerImpl(locale, "create", "ambershop:create"); + tradeTrigger = new TriggerImpl(locale, "trade", "ambershop:trade"); + } + + public void onRegistryTrigger(GameRegistryEvent.Register event) { + event.register(createTrigger); + event.register(tradeTrigger); } @Override @@ -92,5 +105,39 @@ public boolean checkTrade(ItemStack item, World world, Subject subject) { return trade && !service.check(item, world, tradeTrigger, subject).isBanned(); } + @NonnullByDefault + private static class TriggerImpl implements CheckRuleTrigger { + + private final AmberLocale locale; + private final String name; + private final String id; + + private TriggerImpl(AmberLocale locale, String name, String id) { + this.locale = locale; + this.name = name; + this.id = id; + } + + @Override + public String getId() { + return id; + } + + @Override + public String getName() { + return name; + } + + @Override + public Text toText() { + return locale.get("module.ebi.trigger." + name).orElse(Text.of(name)); + } + + @Override + public String toString() { + return name; + } + } + } } diff --git a/src/main/resources/assets/ambershop/locale/zh_cn.conf b/src/main/resources/assets/ambershop/locale/zh_cn.conf index f417582..3c54cfd 100644 --- a/src/main/resources/assets/ambershop/locale/zh_cn.conf +++ b/src/main/resources/assets/ambershop/locale/zh_cn.conf @@ -230,4 +230,12 @@ updater = [ "AmberShop 有更新了" "版本 {0} 发布于 {1}" "前往 {2} 下载" -] \ No newline at end of file +] +module: { + ebi: { + trigger: { + create: "create" + trade: "trade" + } + } +} \ No newline at end of file