Skip to content

Commit

Permalink
Added more structures
Browse files Browse the repository at this point in the history
  • Loading branch information
Edivad99 committed Sep 14, 2023
1 parent f5edb3a commit 1f6190e
Show file tree
Hide file tree
Showing 16 changed files with 252 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// 1.20.1 2023-08-28T12:04:48.322875 Loot Tables
// 1.20.1 2023-09-14T09:51:29.144073 Loot Tables
ffb5382640dd4a5184faf3bfe33f8c7cdb323def data/railcraft/loot_tables/advancements/patchouli_book.json
2368bf4f9231f79e11c75fe244dd7a820a896d65 data/railcraft/loot_tables/blocks/abandoned_activator_track.json
9097789b3b5eebaff6d62020fecf494c96348ac7 data/railcraft/loot_tables/blocks/abandoned_booster_track.json
fbbe6fc8014502014e25452e15f95dc665234e15 data/railcraft/loot_tables/blocks/abandoned_buffer_stop_track.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
// 1.20.1 2023-06-29T09:24:52.48722 Advancements
// 1.20.1 2023-09-14T09:51:29.149702 Advancements
9154f30a7e388b178d4cc4dbcc6d7c27f8ec93c1 data/railcraft/advancements/carts/bed_cart.json
ac1ce09215a6de90b5ba2a6ab1e43e04388b4dfc data/railcraft/advancements/carts/jukebox_cart.json
2855e9f74385393fc5ad37386124e2b01485ab48 data/railcraft/advancements/carts/link_carts.json
26dc92cc86b0682e6ddfc52bcea59f8bfe2f4186 data/railcraft/advancements/carts/locomotive.json
40c818e5c4fb4b1c7415477dbc084956346bdb0d data/railcraft/advancements/carts/root.json
8e14c98b9b80602ae4c47abe73dbcef32e51f8ab data/railcraft/advancements/carts/seasons.json
e62feb9f6f01ea25600603c0e8a5689f7b3a165e data/railcraft/advancements/carts/surprise.json
94ac1f98594404f0a0c4eeda3a75f9d625f17116 data/railcraft/advancements/grant_book_on_first_join.json
320f2ba585565abc10061e6ccd6754398ca63c3f data/railcraft/advancements/tracks/blast_furnace.json
f5d1861c8bea6d0864b5abd4b633ee21088101dd data/railcraft/advancements/tracks/coke_oven.json
b609a05a9f06b985b482a91848e2c4bd296006e2 data/railcraft/advancements/tracks/crusher.json
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"criteria": {
"tick": {
"conditions": {},
"trigger": "minecraft:tick"
}
},
"requirements": [
[
"tick"
]
],
"rewards": {
"loot": [
"railcraft:advancements/patchouli_book"
]
},
"sends_telemetry_event": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"type": "minecraft:advancement_reward",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:set_nbt",
"tag": "{\"patchouli:book\":\"railcraft:guide_book\"}"
}
],
"name": "patchouli:guide_book"
}
],
"rolls": 1.0
}
],
"random_sequence": "railcraft:advancements/patchouli_book"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ public RailcraftAdvancementProvider(PackOutput output,
CompletableFuture<HolderLookup.Provider> registries, ExistingFileHelper existingFileHelper) {
super(output, registries, existingFileHelper, List.of(
new RailcraftTrackAdvancements(),
new RailcraftCartAdvancements()
new RailcraftCartAdvancements(),
new RailcraftAdvancements()
));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package mods.railcraft.data.advancements;

import java.util.function.Consumer;
import mods.railcraft.Railcraft;
import mods.railcraft.data.loot.packs.RailcraftAdvancementRewardLoot;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.core.HolderLookup;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.common.data.ForgeAdvancementProvider;

class RailcraftAdvancements implements ForgeAdvancementProvider.AdvancementGenerator {

@Override
public void generate(HolderLookup.Provider registries, Consumer<Advancement> consumer,
ExistingFileHelper fileHelper) {
Advancement.Builder.advancement()
.addCriterion("tick", PlayerTrigger.TriggerInstance.tick())
.rewards(AdvancementRewards.Builder.loot(RailcraftAdvancementRewardLoot.PATCHOULI_BOOK))
.save(consumer, new ResourceLocation(Railcraft.ID, "grant_book_on_first_join"), fileHelper);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import mods.railcraft.data.loot.packs.RailcraftAdvancementRewardLoot;
import mods.railcraft.data.loot.packs.RailcraftBlockLoot;
import mods.railcraft.data.loot.packs.RailcraftChestLoot;
import net.minecraft.data.PackOutput;
Expand All @@ -24,6 +25,8 @@ public RailcraftLootTableProvider(PackOutput packOutput) {
public List<LootTableProvider.SubProviderEntry> getTables() {
return List.of(
new LootTableProvider.SubProviderEntry(RailcraftBlockLoot::new, LootContextParamSets.BLOCK),
new LootTableProvider.SubProviderEntry(
RailcraftAdvancementRewardLoot::new, LootContextParamSets.ADVANCEMENT_REWARD),
new LootTableProvider.SubProviderEntry(RailcraftChestLoot::new, LootContextParamSets.CHEST));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package mods.railcraft.data.loot.packs;

import java.util.function.BiConsumer;
import mods.railcraft.Railcraft;
import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.functions.SetNbtFunction;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import vazkii.patchouli.api.PatchouliAPI;

public class RailcraftAdvancementRewardLoot implements LootTableSubProvider {

public static final ResourceLocation PATCHOULI_BOOK =
new ResourceLocation(Railcraft.ID, "advancements/patchouli_book");

@Override
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> consumer) {
var bookId = new ResourceLocation(Railcraft.ID, "guide_book");
var book = PatchouliAPI.get().getBookStack(bookId).getItem();
var tag = new CompoundTag();
tag.putString("patchouli:book", bookId.toString());
consumer.accept(PATCHOULI_BOOK, LootTable.lootTable()
.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(LootItem.lootTableItem(book).apply(SetNbtFunction.setTag(tag)))
)
);
}
}
65 changes: 55 additions & 10 deletions src/main/java/mods/railcraft/integrations/patchouli/Patchouli.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,72 @@
import mods.railcraft.Railcraft;
import mods.railcraft.world.level.block.RailcraftBlocks;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.Block;
import vazkii.patchouli.api.IStateMatcher;
import vazkii.patchouli.api.PatchouliAPI;

public class Patchouli {

public static void setup() {
var patchouliApi = PatchouliAPI.get();

var crusherBlock = patchouliApi.predicateMatcher(RailcraftBlocks.CRUSHER.get(),
Patchouli::validEdge);

var crusherBlock = validBlock(patchouliApi, RailcraftBlocks.CRUSHER.get());
var crusher = patchouliApi.makeMultiblock(new String[][]{
{"CC", "CC", "CC"}, //Y:1
{"CC", "0C", "CC"} //Y:0
},
'C', crusherBlock, '0', crusherBlock
{"BB", "BB", "BB"}, //Y:1
{"BB", "0B", "BB"} //Y:0
}, 'B', crusherBlock, '0', crusherBlock
).setSymmetrical(false);
patchouliApi.registerMultiblock(new ResourceLocation(Railcraft.ID, "crusher"), crusher);

var cokeOvenBlock = validBlock(patchouliApi, RailcraftBlocks.COKE_OVEN_BRICKS.get());
var cokeOven = patchouliApi.makeMultiblock(new String[][]{
{"BBB", "BBB", "BBB"}, //Y:2
{"BBB", "BAB", "BBB"}, //Y:1
{"BBB", "B0B", "BBB"} //Y:0
}, 'B', cokeOvenBlock, '0', cokeOvenBlock, 'A', patchouliApi.airMatcher()
).setSymmetrical(true);
patchouliApi.registerMultiblock(new ResourceLocation(Railcraft.ID, "coke_oven"), cokeOven);

var blastFurnaceBlock = validBlock(patchouliApi, RailcraftBlocks.BLAST_FURNACE_BRICKS.get());
var blastFurnace = patchouliApi.makeMultiblock(new String[][]{
{"BBB", "BBB", "BBB"}, //Y:3
{"BBB", "BAB", "BBB"}, //Y:2
{"BBB", "BAB", "BBB"}, //Y:1
{"BBB", "B0B", "BBB"} //Y:0
}, 'B', blastFurnaceBlock, '0', blastFurnaceBlock, 'A', patchouliApi.airMatcher()
).setSymmetrical(true);
patchouliApi
.registerMultiblock(new ResourceLocation(Railcraft.ID, "blast_furnace"), blastFurnace);

var steamTurbineBlock = validBlock(patchouliApi, RailcraftBlocks.STEAM_TURBINE.get());
var steamTurbine = patchouliApi.makeMultiblock(new String[][]{
{"BB", "BB", "BB"}, //Y:1
{"BB", "0B", "BB"} //Y:0
}, 'B', steamTurbineBlock, '0', steamTurbineBlock
).setSymmetrical(false);
patchouliApi
.registerMultiblock(new ResourceLocation(Railcraft.ID, "steam_turbine"), steamTurbine);

var waterTankBlock = validBlock(patchouliApi, RailcraftBlocks.WATER_TANK_SIDING.get());
var waterTank = patchouliApi.makeMultiblock(new String[][]{
{"BB", "BB"}, //Y:1
{"BB", "0B"} //Y:0
}, 'B', waterTankBlock, '0', waterTankBlock
).setSymmetrical(true);
patchouliApi
.registerMultiblock(new ResourceLocation(Railcraft.ID, "water_tank"), waterTank);

var steamOvenBlock = validBlock(patchouliApi, RailcraftBlocks.STEAM_OVEN.get());
var steamOven = patchouliApi.makeMultiblock(new String[][]{
{"BB", "BB"}, //Y:1
{"BB", "0B"} //Y:0
}, 'B', steamOvenBlock, '0', steamOvenBlock
).setSymmetrical(true);
patchouliApi
.registerMultiblock(new ResourceLocation(Railcraft.ID, "steam_oven"), steamOven);
}

private static boolean validEdge(BlockState state) {
return state.is(RailcraftBlocks.CRUSHER.get());
private static IStateMatcher validBlock(PatchouliAPI.IPatchouliAPI api, Block block) {
return api.predicateMatcher(block, state -> state.is(block));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "Test Category",
"description": "This is a test category for testing!",
"icon": "minecraft:writable_book"
"name": "Multi-block structures",
"description": "Everything you need to build multi-block structures",
"icon": "railcraft:coke_oven_bricks"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Blast Furnace",
"icon": "railcraft:blast_furnace_bricks",
"category": "railcraft:multiblock",
"pages": [
{
"type": "patchouli:text",
"text": "This is a test entry, but it should show up!"
},
{
"type": "patchouli:multiblock",
"name": "Blast Furnace",
"multiblock_id": "railcraft:blast_furnace",
"text": "AAA"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Coke Oven",
"icon": "railcraft:coke_oven_bricks",
"category": "railcraft:multiblock",
"pages": [
{
"type": "patchouli:text",
"text": "This is a test entry, but it should show up!"
},
{
"type": "patchouli:multiblock",
"name": "Coke Oven",
"multiblock_id": "railcraft:coke_oven",
"text": "AAA"
}
]
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Test Entry",
"icon": "minecraft:writable_book",
"name": "Crusher",
"icon": "railcraft:crusher",
"category": "railcraft:multiblock",
"pages": [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Steam Oven",
"icon": "railcraft:steam_oven",
"category": "railcraft:multiblock",
"pages": [
{
"type": "patchouli:text",
"text": "This is a test entry, but it should show up!"
},
{
"type": "patchouli:multiblock",
"name": "Steam Oven",
"multiblock_id": "railcraft:steam_oven",
"text": "AAA"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Steam Turbine",
"icon": "railcraft:steam_turbine",
"category": "railcraft:multiblock",
"pages": [
{
"type": "patchouli:text",
"text": "This is a test entry, but it should show up!"
},
{
"type": "patchouli:multiblock",
"name": "Steam Turbine",
"multiblock_id": "railcraft:steam_turbine",
"text": "AAA"
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "Water Tank",
"icon": "railcraft:water_tank_siding",
"category": "railcraft:multiblock",
"pages": [
{
"type": "patchouli:text",
"text": "This is a test entry, but it should show up!"
},
{
"type": "patchouli:multiblock",
"name": "Water Tank",
"multiblock_id": "railcraft:water_tank",
"text": "AAA"
}
]
}

0 comments on commit 1f6190e

Please sign in to comment.