Added a configuration screen; bumped version

This commit is contained in:
Frederik Palmø 2021-10-11 19:10:32 +02:00
parent 55a8fbef43
commit 8bdffdb09f
8 changed files with 80 additions and 35 deletions

View file

@ -11,24 +11,13 @@ version = project.mod_version
group = project.maven_group
repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
}
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
// You may need to force-disable transitiveness on them.
}
processResources {

View file

@ -2,13 +2,12 @@
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/versions.html
minecraft_version=1.17.1
yarn_mappings=1.17.1+build.39
loader_version=0.11.6
# Mod Properties
mod_version = 1.0.1
mod_version = 1.0.2
maven_group = dk.palmoe
archives_base_name = immersivexp

View file

@ -0,0 +1,63 @@
package dk.palmoe.immersivexp;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import com.google.gson.Gson;
import com.google.gson.stream.JsonWriter;
import org.apache.commons.io.IOUtils;;
public class Config {
public int logBaseXP = 1;
public int logRandXP = 2;
public int cropBaseXP = 1;
public int cropRandXP = 1;
public int berriesBaseXP = 0;
public int berriesRandXP = 1;
public static final File FILE = new File("config/immersivexp.json");
public static Config INSTANCE = null;
public static Config getInstance() {
if (INSTANCE == null) {
INSTANCE = new Config().read();
}
return INSTANCE;
}
private Config read() {
if (!FILE.exists())
return new Config().write();
Reader reader = null;
try {
return new Gson().fromJson(reader = new FileReader(FILE), Config.class);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(reader);
}
}
private Config write() {
Gson gson = new Gson();
JsonWriter writer = null;
try {
writer = gson.newJsonWriter(new FileWriter(FILE));
writer.setIndent(" ");
gson.toJson(gson.toJsonTree(this, Config.class), writer);
} catch (Exception e) {
ImmersiveXP.LOGGER.error("Couldn't save config");
e.printStackTrace();
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(writer);
}
return this;
}
}

View file

@ -7,7 +7,6 @@ import net.minecraft.block.CropBlock;
import net.minecraft.block.MelonBlock;
import net.minecraft.block.SweetBerryBushBlock;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.state.property.Property;
import net.minecraft.tag.BlockTags;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Identifier;
@ -16,10 +15,10 @@ import net.minecraft.util.registry.Registry;
public class Events {
public static void init() {
PlayerBlockBreakEvents.AFTER.register((world, player, pos, state, entity) -> {
// TODO: Make experience amount configurable
if (world instanceof ServerWorld) {
if (state.getBlock() instanceof CropBlock || state.getBlock() instanceof MelonBlock) {
Util.spawnExp((ServerWorld) world, pos, 1, 1);
Config config = Config.getInstance();
Util.spawnXp((ServerWorld) world, pos, config.cropBaseXP, config.cropRandXP);
}
if (state.isIn(BlockTags.LOGS)) {
@ -27,20 +26,22 @@ public class Events {
boolean isGrown = Util.isTreeNaturallyGrown(world, pos);
if (holdingAxe && isGrown) {
Util.spawnExp((ServerWorld) world, pos, 1, 4);
Config config = Config.getInstance();
Util.spawnXp((ServerWorld) world, pos, config.logBaseXP, config.logRandXP);
}
}
}
});
UseBlockCallback.EVENT.register(((player, world, hand, hitResult) -> {
// TODO: Make experience amount configurable
BlockState state = world.getBlockState(hitResult.getBlockPos());
if (state.getBlock() instanceof SweetBerryBushBlock && world instanceof ServerWorld) {
int age = state.get(SweetBerryBushBlock.AGE);
if (age == 3) {
Util.spawnExp((ServerWorld) world, hitResult.getBlockPos(), 1, 1);
Config config = Config.getInstance();
Util.spawnXp((ServerWorld) world, hitResult.getBlockPos(), config.berriesBaseXP,
config.berriesRandXP);
}
}

View file

@ -39,8 +39,8 @@ public class Util {
return false;
}
public static void spawnExp(ServerWorld world, BlockPos pos, int min, int cap) {
Vec3d exp_pos = new Vec3d(pos.getX(), pos.getY(), pos.getZ());
ExperienceOrbEntity.spawn(world, exp_pos, min + world.random.nextInt(cap));
public static void spawnXp(ServerWorld world, BlockPos pos, int min, int cap) {
Vec3d xp_pos = new Vec3d(pos.getX(), pos.getY(), pos.getZ());
ExperienceOrbEntity.spawn(world, xp_pos, min + world.random.nextInt(cap));
}
}

View file

@ -1,10 +0,0 @@
package dk.palmoe.immersivexp.mixin;
import org.spongepowered.asm.mixin.Mixin;
import net.minecraft.client.gui.screen.TitleScreen;
@Mixin(TitleScreen.class)
public class ImmersiveXPMixin {
}

View file

@ -18,7 +18,7 @@
"entrypoints": {
"main": ["dk.palmoe.immersivexp.ImmersiveXP"]
},
"mixins": ["immersivexp.mixins.json"],
"mixins": [],
"depends": {
"fabricloader": ">=0.11.3",
@ -28,5 +28,8 @@
},
"suggests": {
"another-mod": "*"
},
"custom": {
"modmenu": {}
}
}

View file

@ -3,8 +3,8 @@
"minVersion": "0.8",
"package": "dk.palmoe.immersivexp.mixin",
"compatibilityLevel": "JAVA_16",
"mixins": ["ImmersiveXPMixin"],
"client": ["ImmersiveXPMixin"],
"mixins": [],
"client": [],
"injectors": {
"defaultRequire": 1
}