Skip to content

Commit

Permalink
ores/animals now configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
MelanX committed Sep 18, 2020
1 parent c66b90b commit e826f7d
Show file tree
Hide file tree
Showing 8 changed files with 208 additions and 35 deletions.
85 changes: 85 additions & 0 deletions src/main/java/de/melanx/ultimatools/ServerConfig.java
@@ -0,0 +1,85 @@
package de.melanx.ultimatools;

import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode;
import net.minecraftforge.common.ForgeConfigSpec;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;

public class ServerConfig {
public static final ForgeConfigSpec SERVER_CONFIG;
private static final ForgeConfigSpec.Builder SERVER_BUILDER = new ForgeConfigSpec.Builder();

static {
init(SERVER_BUILDER);

SERVER_CONFIG = SERVER_BUILDER.build();
}

public static ForgeConfigSpec.ConfigValue<List<? extends String>> OVERWORLD_ORES;
public static ForgeConfigSpec.ConfigValue<List<? extends String>> NETHER_ORES;
public static ForgeConfigSpec.ConfigValue<List<? extends String>> ANIMALS;
public static ForgeConfigSpec.ConfigValue<List<? extends String>> WATER_ANIMALS;

public static void init(ForgeConfigSpec.Builder builder) {
builder.push("ores");
OVERWORLD_ORES = builder.comment("All the ores for upgrading normal ores, order matters")
.defineList("overworld", Arrays.asList(
"minecraft:iron_ore",
"minecraft:redstone_ore",
"minecraft:lapis_ore",
"minecraft:gold_ore",
"minecraft:diamond_ore",
"minecraft:emerald_ore"
), (obj) -> obj instanceof String);
NETHER_ORES = builder.comment("All the ores for upgrading nether ores, order matters")
.defineList("nether", Arrays.asList(
"minecraft:nether_quartz_ore",
"minecraft:nether_gold_ore"
), (obj) -> obj instanceof String);
builder.pop();

builder.push("animals");
ANIMALS = builder.comment("All animals which can spawn randomly")
.defineList("animals", Arrays.asList(
"minecraft:bat",
"minecraft:bee",
"minecraft:cat",
"minecraft:chicken",
"minecraft:cow",
"minecraft:donkey",
"minecraft:fox",
"minecraft:horse",
"minecraft:llama",
"minecraft:mule",
"minecraft:mooshroom",
"minecraft:ocelot",
"minecraft:panda",
"minecraft:parrot",
"minecraft:pig",
"minecraft:polar_bear",
"minecraft:rabbit",
"minecraft:sheep",
"minecraft:turtle",
"minecraft:wolf"
), (obj) -> obj instanceof String);
WATER_ANIMALS = builder.comment("All animals which can spawn in water randomly")
.defineList("water_animals", Arrays.asList(
"minecraft:cod",
"minecraft:dolphin",
"minecraft:pufferfish",
"minecraft:salmon",
"minecraft:squid",
"minecraft:tropical_fish"
), (obj) -> obj instanceof String);
}

public static void loadConfig(ForgeConfigSpec spec, Path path) {
SkyblockUltimaTools.LOGGER.debug("Loading config file {}", path);
final CommentedFileConfig configData = CommentedFileConfig.builder(path).sync().autosave().writingMode(WritingMode.REPLACE).build();
configData.load();
spec.setConfig(configData);
}
}
23 changes: 20 additions & 3 deletions src/main/java/de/melanx/ultimatools/SkyblockUltimaTools.java
@@ -1,22 +1,39 @@
package de.melanx.ultimatools;

import de.melanx.ultimatools.item.Registration;
import de.melanx.ultimatools.lib.LibMisc;
import de.melanx.ultimatools.lib.ListHandlers;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.loading.FMLConfig;
import net.minecraftforge.fml.loading.FMLPaths;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Mod(LibMisc.MODID)
@Mod(SkyblockUltimaTools.MODID)
public class SkyblockUltimaTools {

public SkyblockUltimaTools() {
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerConfig.SERVER_CONFIG);
ServerConfig.loadConfig(ServerConfig.SERVER_CONFIG, FMLPaths.GAMEDIR.get().resolve(FMLConfig.defaultConfigPath()).resolve(MODID + "-server.toml"));
Registration.init();
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onServerStarted);
}

public static final ItemGroup TAB = new ItemGroup(LibMisc.MODID) {
public static final String MODID = "ultimatools";
public static final Logger LOGGER = LogManager.getLogger(MODID);
public static final ItemGroup TAB = new ItemGroup(MODID) {
@Override
public ItemStack createIcon() {
return new ItemStack(Registration.ultimaGod.get());
}
};

private void onServerStarted(FMLCommonSetupEvent event) {
ListHandlers.reloadLists();
}
}
4 changes: 2 additions & 2 deletions src/main/java/de/melanx/ultimatools/data/DataHandler.java
@@ -1,13 +1,13 @@
package de.melanx.ultimatools.data;

import de.melanx.ultimatools.lib.LibMisc;
import de.melanx.ultimatools.SkyblockUltimaTools;
import net.minecraft.data.DataGenerator;
import net.minecraftforge.client.model.generators.ExistingFileHelper;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;

@Mod.EventBusSubscriber(modid = LibMisc.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
@Mod.EventBusSubscriber(modid = SkyblockUltimaTools.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class DataHandler {

@SubscribeEvent
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/de/melanx/ultimatools/data/ItemModels.java
@@ -1,7 +1,7 @@
package de.melanx.ultimatools.data;

import de.melanx.ultimatools.SkyblockUltimaTools;
import de.melanx.ultimatools.item.Registration;
import de.melanx.ultimatools.lib.LibMisc;
import net.minecraft.data.DataGenerator;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.generators.ExistingFileHelper;
Expand All @@ -13,7 +13,7 @@
public class ItemModels extends ItemModelProvider {

public ItemModels(DataGenerator gen, ExistingFileHelper helper) {
super(gen, LibMisc.MODID, helper);
super(gen, SkyblockUltimaTools.MODID, helper);
}

@Override
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/de/melanx/ultimatools/item/Registration.java
@@ -1,7 +1,7 @@
package de.melanx.ultimatools.item;

import com.google.common.collect.ImmutableSet;
import de.melanx.ultimatools.lib.LibMisc;
import de.melanx.ultimatools.SkyblockUltimaTools;
import de.melanx.ultimatools.util.ToolEffects;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
Expand All @@ -15,8 +15,8 @@

public class Registration {

public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, LibMisc.MODID);
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, LibMisc.MODID);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, SkyblockUltimaTools.MODID);
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, SkyblockUltimaTools.MODID);

public static final RegistryObject<Item> beginner = ITEMS.register("beginner", () -> new UltimaTool(ToolEffects::placeWater));
public static final RegistryObject<Item> bloodMagician = ITEMS.register("blood_magician", () -> new UltimaTool(600, ToolEffects::spawnAnimal));
Expand Down
6 changes: 0 additions & 6 deletions src/main/java/de/melanx/ultimatools/lib/LibMisc.java

This file was deleted.

89 changes: 89 additions & 0 deletions src/main/java/de/melanx/ultimatools/lib/ListHandlers.java
@@ -0,0 +1,89 @@
package de.melanx.ultimatools.lib;

import de.melanx.ultimatools.ServerConfig;
import de.melanx.ultimatools.SkyblockUltimaTools;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistries;

import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("ConstantConditions")
public class ListHandlers {

public static List<Block> ORES = new ArrayList<>();
public static List<Block> NETHER_ORES = new ArrayList<>();
public static List<EntityType<?>> ANIMALS = new ArrayList<>();
public static List<EntityType<?>> WATER_ANIMALS = new ArrayList<>();

public static void fillOres() {
ORES.clear();
ServerConfig.OVERWORLD_ORES.get().forEach(string -> {
Block block = ForgeRegistries.BLOCKS.getValue(ResourceLocation.tryCreate(string));
if (block != Blocks.AIR) {
ORES.add(block);
} else {
SkyblockUltimaTools.LOGGER.error("Block '{}' not found", string);
}
});
}

public static void fillNetherOres() {
NETHER_ORES.clear();
ServerConfig.NETHER_ORES.get().forEach(string -> {
Block block = ForgeRegistries.BLOCKS.getValue(ResourceLocation.tryCreate(string));
if (block != Blocks.AIR) {
NETHER_ORES.add(block);
} else {
SkyblockUltimaTools.LOGGER.error("Block '{}' not found", string);
}
});
}

public static void fillAnimals() {
ANIMALS.clear();
ServerConfig.ANIMALS.get().forEach(string -> {
EntityType<?> entity = ForgeRegistries.ENTITIES.getValue(ResourceLocation.tryCreate(string));
if (entity != null) {
if (entity.getClassification() == EntityClassification.CREATURE || entity.getClassification() == EntityClassification.AMBIENT) {
if (entity.getRegistryName().toString().equals(string)) {
ANIMALS.add(entity);
} else {
SkyblockUltimaTools.LOGGER.error("Entity '{}' not found", string);
}
} else {
SkyblockUltimaTools.LOGGER.error("'{}' is no animal", string);
}
}
});
}

public static void fillWaterAnimals() {
WATER_ANIMALS.clear();
ServerConfig.WATER_ANIMALS.get().forEach(string -> {
EntityType<?> entity = ForgeRegistries.ENTITIES.getValue(ResourceLocation.tryCreate(string));
if (entity != null) {
if (entity.getClassification() == EntityClassification.WATER_CREATURE || entity.getClassification() == EntityClassification.WATER_AMBIENT) {
if (entity.getRegistryName().toString().equals(string)) {
WATER_ANIMALS.add(entity);
} else {
SkyblockUltimaTools.LOGGER.error("Entity '{}' not found", string);
}
} else {
SkyblockUltimaTools.LOGGER.error("'{}' is no water animal", string);
}
}
});
}

public static void reloadLists() {
fillOres();
fillNetherOres();
fillAnimals();
fillWaterAnimals();
}
}
26 changes: 7 additions & 19 deletions src/main/java/de/melanx/ultimatools/util/ToolEffects.java
Expand Up @@ -2,13 +2,13 @@

import com.google.common.collect.ImmutableList;
import de.melanx.ultimatools.lib.Function5;
import de.melanx.ultimatools.lib.ListHandlers;
import net.minecraft.block.*;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.MobEntity;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.WaterMobEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluid;
import net.minecraft.fluid.Fluids;
Expand All @@ -32,20 +32,6 @@

public class ToolEffects {

public static List<EntityType<? extends MobEntity>> ANIMALS = ImmutableList.of(EntityType.BAT, EntityType.BEE,
EntityType.CAT, EntityType.CHICKEN, EntityType.COW, EntityType.DONKEY, EntityType.FOX, EntityType.HORSE,
EntityType.LLAMA, EntityType.MULE, EntityType.MOOSHROOM, EntityType.OCELOT, EntityType.PANDA,
EntityType.PARROT, EntityType.PIG, EntityType.POLAR_BEAR, EntityType.RABBIT, EntityType.SHEEP,
EntityType.TURTLE, EntityType.WOLF);

public static List<EntityType<? extends WaterMobEntity>> WATER_ANIMALS = ImmutableList.of(EntityType.COD,
EntityType.DOLPHIN, EntityType.PUFFERFISH, EntityType.SALMON, EntityType.SQUID, EntityType.TROPICAL_FISH);

public static List<Block> ORES = ImmutableList.of(Blocks.IRON_ORE, Blocks.REDSTONE_ORE, Blocks.LAPIS_ORE,
Blocks.GOLD_ORE, Blocks.DIAMOND_ORE, Blocks.EMERALD_ORE);

public static List<Block> ORES_NETHER = ImmutableList.of(Blocks.NETHER_QUARTZ_ORE, Blocks.NETHER_GOLD_ORE);

private ToolEffects() {

}
Expand Down Expand Up @@ -75,15 +61,15 @@ public static boolean spawnAnimal(World world, PlayerEntity player, Hand hand, B
if (!player.canPlayerEdit(pos, face, player.getHeldItem(hand)))
return false;

EntityType<? extends MobEntity> entityType;
EntityType<?> entityType;
if (world.getBlockState(target).getFluidState().getFluid() == Fluids.WATER
|| world.getBlockState(target).getFluidState().getFluid() == Fluids.FLOWING_WATER) {
entityType = WATER_ANIMALS.get(world.rand.nextInt(WATER_ANIMALS.size()));
entityType = ListHandlers.WATER_ANIMALS.get(world.rand.nextInt(ListHandlers.WATER_ANIMALS.size()));
} else {
entityType = ANIMALS.get(world.rand.nextInt(ANIMALS.size()));
entityType = ListHandlers.ANIMALS.get(world.rand.nextInt(ListHandlers.ANIMALS.size()));
}

MobEntity entity = entityType.create(world);
MobEntity entity = (MobEntity) entityType.create(world);
if (entity == null)
return false;
entity.setLocationAndAngles(target.getX() + 0.5, target.getY() + 0.1, target.getZ() + 0.5, player.getRotationYawHead() - 180, 0);
Expand Down Expand Up @@ -118,6 +104,7 @@ public static boolean upgradeOre(World world, PlayerEntity player, Hand hand, Bl
return false;

Block block = world.getBlockState(pos).getBlock();
List<Block> ORES = ImmutableList.copyOf(ListHandlers.ORES);
for (int i = 0; i < ORES.size() - 1; i++) {
if (block == ORES.get(i)) {
BlockState newState = ORES.get(i + 1).getDefaultState();
Expand All @@ -127,6 +114,7 @@ public static boolean upgradeOre(World world, PlayerEntity player, Hand hand, Bl
}
}

List<Block> ORES_NETHER = ImmutableList.copyOf(ListHandlers.NETHER_ORES);
for (int i = 0; i < ORES_NETHER.size() - 1; i++) {
if (block == ORES_NETHER.get(i)) {
BlockState newState = ORES_NETHER.get(i + 1).getDefaultState();
Expand Down

0 comments on commit e826f7d

Please sign in to comment.