From 8b6396e1e12ddd70f826475fb1ffb04e4a4bef26 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Mon, 19 Oct 2020 02:56:45 +0200 Subject: parquet.properties Many features now can be toggled true/false in parquet.properties. CustomStats is now invoked by Parquet, instead of registering stats statically allowing stats to be disabled. --- src/main/java/re/jag/parquet/CustomStats.java | 19 ++++- src/main/java/re/jag/parquet/Parquet.java | 35 ++++++---- src/main/java/re/jag/parquet/ParquetSettings.java | 81 ++++++++++++++++++++++ .../parquet/mixin/AbstractTraderEntityMixin.java | 3 +- .../java/re/jag/parquet/mixin/BootstrapMixin.java | 2 +- src/main/java/re/jag/parquet/mixin/StatsMixin.java | 29 -------- src/main/resources/parquet.mixins.json | 1 - 7 files changed, 122 insertions(+), 48 deletions(-) create mode 100644 src/main/java/re/jag/parquet/ParquetSettings.java delete mode 100644 src/main/java/re/jag/parquet/mixin/StatsMixin.java (limited to 'src/main') diff --git a/src/main/java/re/jag/parquet/CustomStats.java b/src/main/java/re/jag/parquet/CustomStats.java index c9d69b8..f3a65d6 100644 --- a/src/main/java/re/jag/parquet/CustomStats.java +++ b/src/main/java/re/jag/parquet/CustomStats.java @@ -1,14 +1,27 @@ package re.jag.parquet; import net.minecraft.item.Item; +import net.minecraft.stat.StatFormatter; import net.minecraft.stat.StatType; +import net.minecraft.stat.Stats; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public class CustomStats { - public static final StatType TRADED; + public static StatType TRADED; - static { - TRADED = (StatType) Registry.STAT_TYPE.get(new Identifier("traded")); + public static void register_custom_stats() { + if(Parquet.get_settings().stats_villager_trades) TRADED = register_type("traded", Registry.ITEM); + } + + private static Identifier register(String _identifier, StatFormatter _formatter) { + Identifier identifier = new Identifier(_identifier); + Registry.register(Registry.CUSTOM_STAT, _identifier, identifier); + Stats.CUSTOM.getOrCreateStat(identifier, _formatter); + return identifier; + } + + private static StatType register_type(String _identifier, Registry _registry) { + return Registry.register(Registry.STAT_TYPE, new Identifier(_identifier), new StatType(_registry)); } } diff --git a/src/main/java/re/jag/parquet/Parquet.java b/src/main/java/re/jag/parquet/Parquet.java index 617faf7..b115393 100644 --- a/src/main/java/re/jag/parquet/Parquet.java +++ b/src/main/java/re/jag/parquet/Parquet.java @@ -20,31 +20,40 @@ import re.jag.parquet.dispenser.*; public class Parquet implements ModInitializer { public static final Logger LOG = LogManager.getLogger(); - + + private static ParquetSettings settings; + @Override public void onInitialize() { - + } public static void registerCommands(CommandDispatcher dispatcher) { - Savedata.register(dispatcher); - CameraMode.register(dispatcher); - Calculator.register(dispatcher); - TimeDIff.register(dispatcher); - Rename.register(dispatcher); + if(settings.command_savedata) Savedata.register(dispatcher); + if(settings.command_cameramode) CameraMode.register(dispatcher); + if(settings.command_calculator) Calculator.register(dispatcher); + if(settings.command_timediff) TimeDIff.register(dispatcher); + if(settings.command_rename) Rename.register(dispatcher); LOG.info("[PQ] Registered commands"); } - public static void registerCustomDispenserBehavior() { - //TODO Maybe rewrite Cauldron onUse to not only acccept players? - //refactor CauldronBlock onUse - + public static void onBootstrap() { + settings = new ParquetSettings("parquet.properties"); + + CustomStats.register_custom_stats(); + + if (settings.dispenser_custom_behavior) register_dispenser_behavior(); + } + + public static ParquetSettings get_settings(){return settings;} + + private static void register_dispenser_behavior() { //This is a rather hacky implementation DispenserBlock.registerBehavior(Blocks.SHULKER_BOX.asItem(), new ShulkerPlacementDispenserBehavior()); for (DyeColor dye_color : DyeColor.values()) { DispenserBlock.registerBehavior(ShulkerBoxBlock.get(dye_color).asItem(), new ShulkerPlacementDispenserBehavior()); - + DispenserBlock.registerBehavior(DyeItem.byColor(dye_color).asItem(), new DyeItemDispenserBehavior()); } @@ -64,7 +73,7 @@ public class Parquet implements ModInitializer { (MusicDiscItem) Items.MUSIC_DISC_WAIT, (MusicDiscItem) Items.MUSIC_DISC_PIGSTEP }; - for (MusicDiscItem item : music_discs ) + for (MusicDiscItem item : music_discs) DispenserBlock.registerBehavior(item, new MusicDiscDispenserBehavior()); DispenserBlock.registerBehavior(Items.WATER_BUCKET, new WaterBucketDispenserBehavior()); diff --git a/src/main/java/re/jag/parquet/ParquetSettings.java b/src/main/java/re/jag/parquet/ParquetSettings.java new file mode 100644 index 0000000..fce8fa9 --- /dev/null +++ b/src/main/java/re/jag/parquet/ParquetSettings.java @@ -0,0 +1,81 @@ +package re.jag.parquet; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Properties; + +public class ParquetSettings { + Properties properties = new Properties(); + + public final boolean dispenser_custom_behavior; + + public final boolean stats_villager_trades; + + public final boolean command_cameramode; + public final boolean command_savedata; + public final boolean command_calculator; + public final boolean command_rename; + public final boolean command_timediff; + + public ParquetSettings(String _properties_file) { + Path path = FileSystems.getDefault().getPath(_properties_file); + load(path); + + this.dispenser_custom_behavior = get_boolean("dispenser-custom-behavior", true); + + this.stats_villager_trades = get_boolean("stats-villager-trades", true); + + this.command_cameramode = get_boolean("command-cameramode", true); + this.command_savedata = get_boolean("command-savedata", true); + this.command_calculator = get_boolean("command-calculator", true); + this.command_rename = get_boolean("command-rename", true); + this.command_timediff = get_boolean("command-timediff", true); + + save(path); + } + + private void load(Path _path) { + try { + InputStream inp = Files.newInputStream(_path); + properties.load(inp); + + } catch (IOException e) { + Parquet.LOG.error("Failed to read from " + _path.getFileName()); + } + } + + private void save(Path _path) { + try { + OutputStream out = Files.newOutputStream(_path); + properties.store(out, "Parquet mod settings"); + + } catch (IOException e) { + Parquet.LOG.error("Failed to write to " + _path.getFileName()); + } + } + + private String get(String _name, String _default) { + String val = properties.getProperty(_name); + if (val == null) { + properties.setProperty(_name, _default); + return _default; + } + return val; + } + + private boolean get_boolean(String _name, boolean _default) { + return Boolean.parseBoolean(get(_name, String.valueOf(_default))); + } + + private String get_string(String _name, String _default) { + return get(_name, _default); + } + + private int get_int(String _name, int _default) { + return Integer.parseInt(get(_name, String.valueOf(_default))); + } +} diff --git a/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java b/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java index a5e52a1..56c4c2c 100644 --- a/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java +++ b/src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java @@ -10,6 +10,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import re.jag.parquet.CustomStats; +import re.jag.parquet.Parquet; @Mixin(MerchantEntity.class) public class AbstractTraderEntityMixin { @@ -18,7 +19,7 @@ public class AbstractTraderEntityMixin { @Inject(method="trade", at = @At("RETURN")) private void onTrade(TradeOffer tradeOffer, CallbackInfo ci) { - if (this.customer instanceof ServerPlayerEntity) { + if ( Parquet.get_settings().stats_villager_trades && this.customer instanceof ServerPlayerEntity) { ((ServerPlayerEntity)customer).incrementStat( CustomStats.TRADED.getOrCreateStat( tradeOffer.getMutableSellItem().getItem() ) ); } } diff --git a/src/main/java/re/jag/parquet/mixin/BootstrapMixin.java b/src/main/java/re/jag/parquet/mixin/BootstrapMixin.java index 04b448e..1a5caf1 100644 --- a/src/main/java/re/jag/parquet/mixin/BootstrapMixin.java +++ b/src/main/java/re/jag/parquet/mixin/BootstrapMixin.java @@ -14,6 +14,6 @@ public abstract class BootstrapMixin { @Inject(method="initialize", at = @At("RETURN")) private static void onInitialize(CallbackInfo ci) { - Parquet.registerCustomDispenserBehavior(); + Parquet.onBootstrap(); } } diff --git a/src/main/java/re/jag/parquet/mixin/StatsMixin.java b/src/main/java/re/jag/parquet/mixin/StatsMixin.java deleted file mode 100644 index 89463d8..0000000 --- a/src/main/java/re/jag/parquet/mixin/StatsMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package re.jag.parquet.mixin; - -import net.minecraft.item.Item; -import net.minecraft.stat.StatFormatter; -import net.minecraft.stat.StatType; -import net.minecraft.stat.Stats; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -/** - * Has to be a Mixin for the game to load on startup. - * */ - -@Mixin(Stats.class) -public class StatsMixin { - @Shadow - private static StatType registerType(String string, Registry registry){ return null; }; - - @Shadow - private static Identifier register(String string, StatFormatter statFormatter) { return null; } - - private static final StatType TRADED; - - static { - TRADED = registerType("traded", Registry.ITEM); - } -} diff --git a/src/main/resources/parquet.mixins.json b/src/main/resources/parquet.mixins.json index 2185175..d3336eb 100644 --- a/src/main/resources/parquet.mixins.json +++ b/src/main/resources/parquet.mixins.json @@ -10,7 +10,6 @@ "BootstrapMixin", "FireWorkItemMixin", "AbstractTraderEntityMixin", - "StatsMixin", "SellMapFactoryMixin" ], "server": [ -- cgit v1.2.3