aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jonas Gunz <himself@jonasgunz.de> 2020-10-19 02:56:45 +0200
committerGravatar Jonas Gunz <himself@jonasgunz.de> 2020-10-19 02:56:45 +0200
commit8b6396e1e12ddd70f826475fb1ffb04e4a4bef26 (patch)
treec16d1d0194ad90a086bdfb42124399795dc83f6e
parent8cc09788bb81389d255770fd480dcbbae2887e37 (diff)
downloadparquet-8b6396e1e12ddd70f826475fb1ffb04e4a4bef26.tar.gz
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.
-rw-r--r--src/main/java/re/jag/parquet/CustomStats.java19
-rw-r--r--src/main/java/re/jag/parquet/Parquet.java35
-rw-r--r--src/main/java/re/jag/parquet/ParquetSettings.java81
-rw-r--r--src/main/java/re/jag/parquet/mixin/AbstractTraderEntityMixin.java3
-rw-r--r--src/main/java/re/jag/parquet/mixin/BootstrapMixin.java2
-rw-r--r--src/main/java/re/jag/parquet/mixin/StatsMixin.java29
-rw-r--r--src/main/resources/parquet.mixins.json1
7 files changed, 122 insertions, 48 deletions
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<Item> TRADED;
+ public static StatType<Item> TRADED;
- static {
- TRADED = (StatType<Item>) 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<ServerCommandSource> 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<Item> registerType(String string, Registry<Item> registry){ return null; };
-
- @Shadow
- private static Identifier register(String string, StatFormatter statFormatter) { return null; }
-
- private static final StatType<Item> 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": [