Skip to content

Commit

Permalink
Begin work on updating Natura to 1.14! NaturaCommon has been almost a…
Browse files Browse the repository at this point in the history
…ll ported over to 1.14 besides all the recipes.
  • Loading branch information
alexbegt committed Sep 11, 2019
1 parent c8d283d commit b82e0a4
Show file tree
Hide file tree
Showing 135 changed files with 1,604 additions and 3 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ version.properties
/*.project
/.settings/
/*.launch
/out
/out
/generated
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ minecraft_version=1.14.4
minecraft_version_toml=14

# Forge Version Information
forge_version=28.0.91
forge_version=28.0.104
forge_version_toml=28

# Mappings Information
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/progwml6/natura/Natura.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.progwml6.natura.common.ClientProxy;
import com.progwml6.natura.common.Config;
import com.progwml6.natura.common.ServerProxy;
import com.progwml6.natura.common.data.NaturaLootTableProvider;
import com.progwml6.natura.common.data.NaturaRecipeProvider;
import com.progwml6.natura.library.Util;
import com.progwml6.natura.shared.NaturaCommons;
import net.minecraft.data.DataGenerator;
Expand Down Expand Up @@ -62,6 +64,9 @@ private void gatherData(final GatherDataEvent event) {
DataGenerator gen = event.getGenerator();

if (event.includeServer()) {
gen.addProvider(new NaturaLootTableProvider(gen));
gen.addProvider(new NaturaRecipeProvider(gen));

gen.addProvider(new BlockStateJsonGenerator(gen, modID));
gen.addProvider(new ModelJsonGenerator(gen, modID));
gen.addProvider(new LanguageJsonGenerator(gen, modID));
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/com/progwml6/natura/common/Tags.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.progwml6.natura.common;

import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation;

public class Tags {

public static class Blocks {

public static final Tag<Block> CLOUDS = tag("clouds");

private static Tag<Block> tag(String name) {
return new BlockTags.Wrapper(new ResourceLocation("tconstruct", name));
}

private static Tag<Block> forgeTag(String name) {
return new BlockTags.Wrapper(new ResourceLocation("forge", name));
}
}

public static class Items {

public static final Tag<Item> CLOUDS = tag("clouds");
public static final Tag<Item> CROPS_BARLEY = forgeTag("crops/barley");

private static Tag<Item> tag(String name) {
return new ItemTags.Wrapper(new ResourceLocation("tconstruct", name));
}

private static Tag<Item> forgeTag(String name) {
return new ItemTags.Wrapper(new ResourceLocation("forge", name));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.progwml6.natura.common.conditions;

import com.google.gson.JsonObject;
import com.progwml6.natura.Natura;
import net.minecraft.util.JSONUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.crafting.conditions.ICondition;
import net.minecraftforge.common.crafting.conditions.IConditionSerializer;

public class PulseLoadedCondition implements ICondition {

private static final ResourceLocation NAME = new ResourceLocation("natura", "pulse_loaded");
private final String pulseId;

public PulseLoadedCondition(String pulseId) {
this.pulseId = pulseId;
}

@Override
public ResourceLocation getID() {
return NAME;
}

@Override
public boolean test() {
return Natura.pulseManager.isPulseLoaded(this.pulseId);
}

@Override
public String toString() {
return "pulse_loaded(\"" + this.pulseId + "\")";
}

public static class Serializer implements IConditionSerializer<PulseLoadedCondition> {

public static final Serializer INSTANCE = new Serializer();

@Override
public void write(JsonObject json, PulseLoadedCondition value) {
json.addProperty("pulseid", value.pulseId);
}

@Override
public PulseLoadedCondition read(JsonObject json) {
return new PulseLoadedCondition(JSONUtils.getString(json, "pulseid"));
}

@Override
public ResourceLocation getID() {
return PulseLoadedCondition.NAME;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.progwml6.natura.common.data;

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import net.minecraft.block.Block;
import net.minecraft.data.loot.BlockLootTables;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.LootTable;
import net.minecraft.world.storage.loot.LootTables;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Function;

import static com.progwml6.natura.shared.NaturaCommons.ash_cloud;
import static com.progwml6.natura.shared.NaturaCommons.dark_cloud;
import static com.progwml6.natura.shared.NaturaCommons.sulfur_cloud;
import static com.progwml6.natura.shared.NaturaCommons.white_cloud;

public class NaturaBlockLootTables extends BlockLootTables {

private final Map<ResourceLocation, LootTable.Builder> loot_tables = Maps.newHashMap();

private Set<Block> knownBlocks = new HashSet<>();

private void addCommon() {
this.func_218492_c(white_cloud);
this.func_218492_c(dark_cloud);
this.func_218492_c(ash_cloud);
this.func_218492_c(sulfur_cloud);
}

@Override
public void accept(BiConsumer<ResourceLocation, LootTable.Builder> consumer) {
this.addCommon();

Set<ResourceLocation> visited = Sets.newHashSet();

for (Block block : this.knownBlocks) {
ResourceLocation lootTable = block.getLootTable();
if (lootTable != LootTables.EMPTY && visited.add(lootTable)) {
LootTable.Builder builder = this.field_218581_i.remove(lootTable);
if (builder == null) {
throw new IllegalStateException(String.format("Missing loottable '%s' for '%s'", lootTable, block.getRegistryName()));
}

consumer.accept(lootTable, builder);
}
}

if (!this.field_218581_i.isEmpty()) {
throw new IllegalStateException("Created block loot tables for non-blocks: " + this.field_218581_i.keySet());
}
}

@Override
public void func_218564_a(Block blockIn, Block droppedBlockIn) {
this.knownBlocks.add(blockIn);
super.func_218564_a(blockIn, droppedBlockIn);
}

@Override
public void func_218492_c(Block block) {
this.knownBlocks.add(block);
super.func_218492_c(block);
}

@Override
public void registerLootTable(Block blockIn, Function<Block, LootTable.Builder> builderFunction) {
this.knownBlocks.add(blockIn);
super.registerLootTable(blockIn, builderFunction);
}

@Override
public void registerLootTable(Block blockIn, LootTable.Builder builder) {
this.knownBlocks.add(blockIn);
super.registerLootTable(blockIn, builder);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.progwml6.natura.common.data;

import com.progwml6.natura.shared.NaturaCommons;
import net.minecraft.data.BlockTagsProvider;
import net.minecraft.data.DataGenerator;
import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation;

import java.nio.file.Path;
import java.util.Set;
import java.util.stream.Collectors;

import static com.progwml6.natura.common.Tags.Blocks.CLOUDS;

public class NaturaBlockTagsProvider extends BlockTagsProvider {

private Set<ResourceLocation> filter = null;

public NaturaBlockTagsProvider(DataGenerator generatorIn) {
super(generatorIn);
}

@Override
public void registerTags() {
super.registerTags();

this.filter = this.tagToBuilder.keySet().stream().map(Tag::getId).collect(Collectors.toSet());

this.getBuilder(CLOUDS).add(NaturaCommons.white_cloud, NaturaCommons.dark_cloud, NaturaCommons.ash_cloud, NaturaCommons.sulfur_cloud);
}

@Override
protected Path makePath(ResourceLocation id) {
return this.filter != null && this.filter.contains(id) ? null : super.makePath(id); //We don't want to save vanilla tags.
}

@Override
public String getName() {
return "Natura Block Tags";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.progwml6.natura.common.data;

import com.progwml6.natura.common.Tags;
import com.progwml6.natura.shared.NaturaCommons;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.ItemTagsProvider;
import net.minecraft.tags.Tag;
import net.minecraft.util.ResourceLocation;

import java.nio.file.Path;
import java.util.Set;
import java.util.stream.Collectors;

public class NaturaItemTagsProvider extends ItemTagsProvider {

private Set<ResourceLocation> filter = null;

public NaturaItemTagsProvider(DataGenerator generatorIn) {
super(generatorIn);
}

@Override
public void registerTags() {
super.registerTags();

this.filter = this.tagToBuilder.keySet().stream().map(Tag::getId).collect(Collectors.toSet());

this.copy(Tags.Blocks.CLOUDS, Tags.Items.CLOUDS);

getBuilder(Tags.Items.CROPS_BARLEY).add(NaturaCommons.barley);
}

@Override
protected Path makePath(ResourceLocation id) {
return this.filter != null && this.filter.contains(id) ? null : super.makePath(id); //We don't want to save vanilla tags.
}

@Override
public String getName() {
return "Tconstruct Item Tags";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.progwml6.natura.common.data;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mojang.datafixers.util.Pair;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DirectoryCache;
import net.minecraft.data.IDataProvider;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.LootParameterSet;
import net.minecraft.world.storage.loot.LootParameterSets;
import net.minecraft.world.storage.loot.LootTable;
import net.minecraft.world.storage.loot.LootTableManager;
import net.minecraft.world.storage.loot.LootTables;
import net.minecraft.world.storage.loot.ValidationResults;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;

public class NaturaLootTableProvider implements IDataProvider {

private static final Logger LOGGER = LogManager.getLogger();
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create();
private final DataGenerator dataGenerator;
private final List<Pair<Supplier<Consumer<BiConsumer<ResourceLocation, LootTable.Builder>>>, LootParameterSet>> field_218444_e = ImmutableList.of(
Pair.of(NaturaBlockLootTables::new, LootParameterSets.BLOCK));

public NaturaLootTableProvider(DataGenerator dataGeneratorIn) {
this.dataGenerator = dataGeneratorIn;
}

/**
* Performs this provider's action.
*/
@Override
public void act(DirectoryCache cache) {
Path path = this.dataGenerator.getOutputFolder();
Map<ResourceLocation, LootTable> map = Maps.newHashMap();
this.field_218444_e.forEach((p_218438_1_) -> {
p_218438_1_.getFirst().get().accept((p_218437_2_, p_218437_3_) -> {
if (map.put(p_218437_2_, p_218437_3_.setParameterSet(p_218438_1_.getSecond()).build()) != null) {
throw new IllegalStateException("Duplicate loot table " + p_218437_2_);
}
});
});
ValidationResults validationresults = new ValidationResults();

for (ResourceLocation resourcelocation : Sets.difference(LootTables.func_215796_a(), map.keySet())) {
validationresults.addProblem("Missing built-in table: " + resourcelocation);
}

map.forEach((p_218436_2_, p_218436_3_) -> {
LootTableManager.func_215302_a(validationresults, p_218436_2_, p_218436_3_, map::get);
});
Multimap<String, String> multimap = validationresults.getProblems();

map.forEach((p_218440_2_, p_218440_3_) -> {
Path path1 = getPath(path, p_218440_2_);

try {
IDataProvider.save(GSON, cache, LootTableManager.toJson(p_218440_3_), path1);
}
catch (IOException ioexception) {
LOGGER.error("Couldn't save loot table {}", path1, ioexception);
}

});
}

private static Path getPath(Path pathIn, ResourceLocation id) {
return pathIn.resolve("data/" + id.getNamespace() + "/loot_tables/" + id.getPath() + ".json");
}

/**
* Gets a name for this provider, to use in logging.
*/
@Override
public String getName() {
return "Natura LootTables";
}
}
Loading

0 comments on commit b82e0a4

Please sign in to comment.