resolve merge conflicts

This commit is contained in:
thedarkcolour 2024-02-19 14:26:28 -08:00
commit a5194a39d6
30 changed files with 378 additions and 33 deletions

View File

@ -5,7 +5,7 @@ plugins {
id 'org.spongepowered.mixin' version '0.7.+'
}
version = '1.21'
version = '1.24'
group = 'thedarkcolour.exdeorum'
base {
archivesName = 'exdeorum'

View File

@ -1,3 +1,17 @@
## Ex Deorum 1.24
- Fixed water crucibles filling infinitely with rainwater. (PR #54 by CPearl0)
- Add option (disabled by default) to make dirt from flowing water and witch water
- Fix Infested Leaves not showing in REI composite mode
## Ex Deorum 1.23
- Fixed rendering crash with crucibles
- Added recipes to upgrade meshes to the next tier
## Ex Deorum 1.22
- Fixed behavior of Porcelain Milk Bucket when the milk fluid is enabled
- Fixed barrel not rendering flat item contents like Magma Cream
- Fixed Infested Leaves not dropping any string or silkworms
## Ex Deorum 1.21
- Added Crook recipes. It is now possible to add drops to the crook, for example, you could make it so that using a Crook on tall grass would have a 1% chance of dropping a diamond.
- Added Crucible Heat Source recipes. Instead of using KubeJS, crucible heat sources can now be added with datapacks. Old KubeJS scripts will still work fine.

View File

@ -1,4 +1,4 @@
// 1.20.1 2024-02-09T12:37:53.8355693 Loot Tables
// 1.20.1 2024-02-12T09:38:22.3873783 Loot Tables
105d8a61ea7145d7798146d385d4aad24fd1588d data/exdeorum/loot_tables/blocks/acacia_barrel.json
1e77127a82cbba0937bb02694f65cf1893aeffcb data/exdeorum/loot_tables/blocks/acacia_crucible.json
fcc00910a8cc94bed6339d6833fcec53c501a0d7 data/exdeorum/loot_tables/blocks/acacia_sieve.json
@ -51,6 +51,7 @@ b3b8c57f4614b036263f1e107bb1e0acf4a69122 data/exdeorum/loot_tables/blocks/green_
32602e363024f1bbd0a174a19c61b4cb0e4f3b2c data/exdeorum/loot_tables/blocks/hellbark_barrel.json
cbf36cffd7f38d618435ca03142ded5e74f217aa data/exdeorum/loot_tables/blocks/hellbark_crucible.json
bf41c8c33133269ddde2c6b098aca056acd7e4ea data/exdeorum/loot_tables/blocks/hellbark_sieve.json
3b759445e6d4ee6dd1690aaa792bb070e19cde4f data/exdeorum/loot_tables/blocks/infested_leaves.json
ce4254c53a4ce6c2712775708415f14e63f21b67 data/exdeorum/loot_tables/blocks/jacaranda_barrel.json
b23b0494ef9f535744f7390f74a35527442aee6f data/exdeorum/loot_tables/blocks/jacaranda_crucible.json
1817eb94fb9656a3ad853f2cca138c1cd012bd26 data/exdeorum/loot_tables/blocks/jacaranda_sieve.json

View File

@ -1,4 +1,4 @@
// 1.20.1 2024-02-09T20:14:05.875864 Recipes
// 1.20.1 2024-02-13T15:52:36.681433 Recipes
e37b64428f17e304e91539ac0513456d7ce40cd1 data/exdeorum/advancements/recipes/building_blocks/sponge.json
5ad481a0c376c1a1785a5d3b992064d0ec0bf3b0 data/exdeorum/advancements/recipes/food/end_cake.json
25dd027e844a72b03c95dbe5e3c3dd8c738ceb00 data/exdeorum/advancements/recipes/misc/acacia_barrel.json
@ -30,12 +30,16 @@ cf30753819f21a29082554871fa4617a060eb11c data/exdeorum/advancements/recipes/misc
6fa805a246c424ea651fff9003e11f3c8632cd3c data/exdeorum/advancements/recipes/misc/dark_oak_crucible.json
ce387be36edacdb259a5ea4564ad4b14ccec7950 data/exdeorum/advancements/recipes/misc/dark_oak_sieve.json
05ed034071a2c7df228c235fa1104052aca23ebc data/exdeorum/advancements/recipes/misc/diamond_mesh.json
e2d8907fddf4e1cfce8264ecb4f64e8a0a740864 data/exdeorum/advancements/recipes/misc/diamond_mesh_from_golden_mesh.json
7a521fa3d4d9c602a1135e22ef63d5e407f3262a data/exdeorum/advancements/recipes/misc/diorite.json
fd152bac09d1c3bbe67302f13c2135428d6ef48e data/exdeorum/advancements/recipes/misc/flint_mesh.json
c53bfdee553d63b3e96194991a4b14dfd7bcb083 data/exdeorum/advancements/recipes/misc/flint_mesh_from_string_mesh.json
f3d25fad0818f06ed341008daa157732a41702f0 data/exdeorum/advancements/recipes/misc/golden_mesh.json
2ad83bb51d746348b7be8a3a50c6a96d07d58c9e data/exdeorum/advancements/recipes/misc/golden_mesh_from_iron_mesh.json
8e0b91838f1597f97158c6d6c1d5d4dd1da3ceb7 data/exdeorum/advancements/recipes/misc/gold_ore.json
13e1a8346dc49decee9de11f6d589f0b033aa65d data/exdeorum/advancements/recipes/misc/granite.json
6b6169e1c93c990cdac051f6b96849a4cf1850ad data/exdeorum/advancements/recipes/misc/iron_mesh.json
2bc30374479baadb359411edd929ebf0fb1e9a37 data/exdeorum/advancements/recipes/misc/iron_mesh_from_flint_mesh.json
2f2e4e3f4893390b7248a1fd9fd405d628aaa69c data/exdeorum/advancements/recipes/misc/iron_ore.json
13ae44cb8da590953fc295c730e3606ab8c8ef7e data/exdeorum/advancements/recipes/misc/jungle_barrel.json
4e23fd62963a608c73565d61966cd700537b48a7 data/exdeorum/advancements/recipes/misc/jungle_crucible.json
@ -231,6 +235,7 @@ b14283dd10c79ddb507aa849a9a432266b615f19 data/exdeorum/recipes/dark_oak_sieve.js
49db33903b6892db0f17ce50e9a3ca78aef007ed data/exdeorum/recipes/dead_sieve.json
0558034d3940e2bd4046ad2af07c42068852dc76 data/exdeorum/recipes/diamond_hammer.json
4bb1b1df247eaa495b18df77893ac6cfaaa9477a data/exdeorum/recipes/diamond_mesh.json
e8b0389a7d980e745bc8df86c2d3d35b0792cad4 data/exdeorum/recipes/diamond_mesh_from_golden_mesh.json
8244864c8c0fb88af380c18bb593a8cb3982abbd data/exdeorum/recipes/diamond_watering_can.json
596e6fb9a4c633938b7b3c778baad53cdd9fd2ed data/exdeorum/recipes/diorite.json
44da784210aab9a5035b77cb1fa71761b025ef62 data/exdeorum/recipes/dusk_barrel.json
@ -241,11 +246,13 @@ a3b9f47a73b9cbb4d908ac0b8ad90b308271c04c data/exdeorum/recipes/fir_barrel.json
7f7a034824513701aa0493267f7f8219d8fdef89 data/exdeorum/recipes/fir_crucible.json
8821d420a2f1dae54a0276cf33f94b5689eda056 data/exdeorum/recipes/fir_sieve.json
fafeef8c11df81d877166ba0d4add3823515dad3 data/exdeorum/recipes/flint_mesh.json
31d74ecb43dbcc5b40a1ef4694974166d21f4781 data/exdeorum/recipes/flint_mesh_from_string_mesh.json
c778aaf0af19417cab77cc60852725c871190ad3 data/exdeorum/recipes/frostbright_barrel.json
3023dca367b5b56ef41c2819c9169bb961f0c9a8 data/exdeorum/recipes/frostbright_crucible.json
500a5175a3660f37899b652a3c18c3d867f7c504 data/exdeorum/recipes/frostbright_sieve.json
4adddee39d6ff6ee58dedfdeb32265a051f9a722 data/exdeorum/recipes/golden_hammer.json
a32f858ab7b6b5d5546b8474175a44a93d85f8bc data/exdeorum/recipes/golden_mesh.json
58896fb67b08a41479546cd64f6e97ea9afbe013 data/exdeorum/recipes/golden_mesh_from_iron_mesh.json
a119064052e4bb6873c6dc10c50b36e52e9dc58c data/exdeorum/recipes/golden_oak_crucible.json
e77acbd0878f662f441d590287e71e66593ef928 data/exdeorum/recipes/golden_watering_can.json
44ed0e97591833c39e32847f22edf333ae551b22 data/exdeorum/recipes/gold_ore.json
@ -282,6 +289,7 @@ f6b16e8168c798bc433e19edf5ede3a7703865f5 data/exdeorum/recipes/hammer/wood_chipp
2995ec75979bfb8b0415b8a1da7db7001b9ae433 data/exdeorum/recipes/hellbark_sieve.json
3067ccffd037b6d16ba09ae181813be6471d2050 data/exdeorum/recipes/iron_hammer.json
f046e0fa73b12cea658363a082ad0da48e21e85d data/exdeorum/recipes/iron_mesh.json
a1a0885f28b2cbe72251d6db69df22a4e8e47d97 data/exdeorum/recipes/iron_mesh_from_flint_mesh.json
6f06b4d91979afc8000988cd20519379152a373b data/exdeorum/recipes/iron_ore.json
f4ea515ec72c867b9c0b54df162bd07c62e1a7ce data/exdeorum/recipes/iron_watering_can.json
4d7d68580f0271eea4728062fa608b87aa04570f data/exdeorum/recipes/jacaranda_barrel.json

View File

@ -1,4 +1,4 @@
// 1.20.1 2024-01-25T14:16:46.2347562 ModKit Item Models for mod 'exdeorum'
// 1.20.1 2024-02-15T19:28:58.9458068 ModKit Item Models for mod 'exdeorum'
4ba3bb2c6174ac3728a4b85e34681f118ec8eb34 assets/exdeorum/models/item/acacia_barrel.json
c03ce41f7c071498fcbd5f5225e91dcb2f365fbb assets/exdeorum/models/item/acacia_crucible.json
3b4f1d45c0d9c4cd1d9a5cdf6ddc8d2c9791bca5 assets/exdeorum/models/item/acacia_sieve.json
@ -76,6 +76,7 @@ a117ad0a6e1d193ee65c0a2af1a88f7f5be444fd assets/exdeorum/models/item/green_archw
b0d0d1ec41f465872243ea5b59a22caeadc1b81a assets/exdeorum/models/item/hellbark_barrel.json
4de47af7d2a66a6e18ce93c9e3a1582b33073a6b assets/exdeorum/models/item/hellbark_crucible.json
c3a5bdc2c3e8b12b41e9c3aae44839a331a5d238 assets/exdeorum/models/item/hellbark_sieve.json
53eb28442e7df2970b24a79fe0830c41c2388487 assets/exdeorum/models/item/infested_leaves.json
abd9901aa00893690461a6c6e276bb6bc96a60bb assets/exdeorum/models/item/iridium_ore_chunk.json
b91a19335ff248805cf0861cae82b93d71a9e805 assets/exdeorum/models/item/iron_hammer.json
3398985db718bd990d9f7cfdf4bacf67a858b906 assets/exdeorum/models/item/iron_mesh.json

View File

@ -0,0 +1,3 @@
{
"parent": "exdeorum:block/infested_leaves"
}

View File

@ -0,0 +1,33 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"tag": "forge:gems/diamond"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "exdeorum:diamond_mesh_from_golden_mesh"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"exdeorum:diamond_mesh_from_golden_mesh"
]
},
"sends_telemetry_event": true
}

View File

@ -0,0 +1,35 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"items": [
"minecraft:flint"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "exdeorum:flint_mesh_from_string_mesh"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"exdeorum:flint_mesh_from_string_mesh"
]
},
"sends_telemetry_event": true
}

View File

@ -0,0 +1,33 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"tag": "forge:ingots/gold"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "exdeorum:golden_mesh_from_iron_mesh"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"exdeorum:golden_mesh_from_iron_mesh"
]
},
"sends_telemetry_event": true
}

View File

@ -0,0 +1,33 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_item": {
"conditions": {
"items": [
{
"tag": "forge:ingots/iron"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "exdeorum:iron_mesh_from_flint_mesh"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"exdeorum:iron_mesh_from_flint_mesh"
]
},
"sends_telemetry_event": true
}

View File

@ -0,0 +1,11 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [],
"rolls": 1.0
}
],
"random_sequence": "exdeorum:blocks/infested_leaves"
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": {
"tag": "forge:gems/diamond"
},
"M": {
"item": "exdeorum:golden_mesh"
}
},
"pattern": [
" # ",
"#M#",
" # "
],
"result": {
"item": "exdeorum:diamond_mesh"
},
"show_notification": true
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": {
"item": "minecraft:flint"
},
"M": {
"item": "exdeorum:string_mesh"
}
},
"pattern": [
" # ",
"#M#",
" # "
],
"result": {
"item": "exdeorum:flint_mesh"
},
"show_notification": true
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": {
"tag": "forge:ingots/gold"
},
"M": {
"item": "exdeorum:iron_mesh"
}
},
"pattern": [
" # ",
"#M#",
" # "
],
"result": {
"item": "exdeorum:golden_mesh"
},
"show_notification": true
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": {
"tag": "forge:ingots/iron"
},
"M": {
"item": "exdeorum:flint_mesh"
}
},
"pattern": [
" # ",
"#M#",
" # "
],
"result": {
"item": "exdeorum:iron_mesh"
},
"show_notification": true
}

View File

@ -21,8 +21,10 @@ package thedarkcolour.exdeorum.block;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
@ -56,6 +58,23 @@ public class InfestedLeavesBlock extends LeavesBlock implements EntityBlock {
builder.add(FULLY_INFESTED);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext ctx) {
if (ctx.getPlayer() != null) {
return defaultBlockState().setValue(FULLY_INFESTED, true);
}
return super.getStateForPlacement(ctx);
}
@Override
public void setPlacedBy(Level level, BlockPos pos, BlockState pState, @Nullable LivingEntity player, ItemStack pStack) {
if (player != null) {
if (!level.isClientSide && level.getBlockEntity(pos) instanceof InfestedLeavesBlockEntity leaves) {
leaves.setProgress(1.0f);
}
}
}
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {

View File

@ -52,6 +52,7 @@ import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.registries.ForgeRegistries;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import thedarkcolour.exdeorum.blockentity.helper.FluidHelper;
import thedarkcolour.exdeorum.config.EConfig;
import thedarkcolour.exdeorum.recipe.crucible.CrucibleRecipe;
import thedarkcolour.exdeorum.registry.EBlockEntities;
@ -291,7 +292,7 @@ public abstract class AbstractCrucibleBlockEntity extends EBlockEntity {
}
}
private static class FluidHandler extends FluidTank {
private static class FluidHandler extends FluidHelper {
public FluidHandler() {
super(4_000);
}
@ -362,7 +363,8 @@ public abstract class AbstractCrucibleBlockEntity extends EBlockEntity {
if (crucible.tank.isEmpty()) {
crucible.tank.setFluid(new FluidStack(Fluids.WATER, 1));
crucible.markUpdated();
} else if (crucible.tank.getFluid().getFluid() == Fluids.WATER) {
} else if (crucible.tank.getFluid().getFluid() == Fluids.WATER &&
crucible.tank.getFluidAmount() < crucible.tank.getCapacity()) {
crucible.tank.getFluid().grow(1);
crucible.markUpdated();
}

View File

@ -51,12 +51,12 @@ import net.minecraftforge.fluids.FluidType;
import net.minecraftforge.fluids.FluidUtil;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler;
import org.jetbrains.annotations.NotNull;
import thedarkcolour.exdeorum.block.BarrelBlock;
import thedarkcolour.exdeorum.blockentity.helper.FluidHelper;
import thedarkcolour.exdeorum.client.CompostColors;
import thedarkcolour.exdeorum.config.EConfig;
import thedarkcolour.exdeorum.material.BarrelMaterial;
@ -608,7 +608,7 @@ public class BarrelBlockEntity extends EBlockEntity {
}
// Inner class
private class FluidHandler extends FluidTank {
private class FluidHandler extends FluidHelper {
public FluidHandler() {
super(1000);
}

View File

@ -119,6 +119,10 @@ public class InfestedLeavesBlockEntity extends EBlockEntity {
return this.progress;
}
public void setProgress(float progress) {
this.progress = progress;
}
public BlockState getMimic() {
return this.mimic;
}

View File

@ -25,18 +25,6 @@ public class EnergyHelper extends EnergyStorage {
super(capacity);
}
public EnergyHelper(int capacity, int maxTransfer) {
super(capacity, maxTransfer);
}
public EnergyHelper(int capacity, int maxReceive, int maxExtract) {
super(capacity, maxReceive, maxExtract);
}
public EnergyHelper(int capacity, int maxReceive, int maxExtract, int energy) {
super(capacity, maxReceive, maxExtract, energy);
}
public void setStoredEnergy(int energy) {
this.energy = energy;
}

View File

@ -0,0 +1,37 @@
/*
* Ex Deorum
* Copyright (c) 2024 thedarkcolour
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package thedarkcolour.exdeorum.blockentity.helper;
import net.minecraft.nbt.CompoundTag;
import net.minecraftforge.fluids.capability.templates.FluidTank;
// Only changed behavior from FluidTank is that fluid stacks read from NBT are clamped and removed validator predicate.
public class FluidHelper extends FluidTank {
public FluidHelper(int capacity) {
super(capacity);
}
@Override
public FluidTank readFromNBT(CompoundTag nbt) {
super.readFromNBT(nbt);
this.fluid.setAmount(Math.min(this.capacity, this.fluid.getAmount()));
return this;
}
}

View File

@ -24,6 +24,7 @@ import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.SlotItemHandler;
import org.jetbrains.annotations.NotNull;
// Has same behavior as ItemStackHandler but is more customizable.
public class ItemHelper extends ItemStackHandler {
public ItemHelper(int size) {
super(size);

View File

@ -23,6 +23,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import thedarkcolour.exdeorum.blockentity.AbstractCrucibleBlockEntity;
import thedarkcolour.exdeorum.client.RenderUtil;
@ -51,15 +52,20 @@ public class CrucibleRenderer implements BlockEntityRenderer<AbstractCrucibleBlo
RenderUtil.renderFlatFluidSprite(buffers, stack, level, pos, y, 2.0f, light, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, fluid);
}
if (solids != 0) {
// LastMelted is not null if solids is nonzero
@SuppressWarnings("DataFlowIssue")
var face = RenderUtil.getTopFaceOrDefault(crucible.getLastMelted(), crucible.getDefaultMeltBlock());
// eating my words rn :(
var lastMelted = crucible.getLastMelted();
if (lastMelted == null) {
lastMelted = crucible.getDefaultMeltBlock();
}
var color = Minecraft.getInstance().getBlockColors().getColor(crucible.getLastMelted().defaultBlockState(), level, pos, 0);
var face = RenderUtil.getTopFaceOrDefault(lastMelted, crucible.getDefaultMeltBlock());
var color = Minecraft.getInstance().getBlockColors().getColor(lastMelted.defaultBlockState(), level, pos, 0);
if (color == -1) color = 0xffffff;
face.renderFlatSpriteLerp(buffers, stack, solids, (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, light, 2.0f, 4.0f, 14.0f);
}
}
});

View File

@ -143,7 +143,7 @@ public class ExDeorumJeiPlugin implements IModPlugin {
@Override
public void registerRecipes(IRecipeRegistration registration) {
registration.addItemStackInfo(new ItemStack(EItems.SILK_WORM.get()), Component.translatable(TranslationKeys.SILK_WORM_JEI_INFO));
registration.addItemStackInfo(List.of(new ItemStack(EItems.INFESTED_LEAVES.get()), new ItemStack(EItems.SILK_WORM.get())), Component.translatable(TranslationKeys.SILK_WORM_JEI_INFO));
registration.addItemStackInfo(List.of(new ItemStack(EBlocks.OAK_SIEVE.get()), new ItemStack(EBlocks.SPRUCE_SIEVE.get()), new ItemStack(EBlocks.BIRCH_SIEVE.get()), new ItemStack(EBlocks.JUNGLE_SIEVE.get()), new ItemStack(EBlocks.ACACIA_SIEVE.get()), new ItemStack(EBlocks.DARK_OAK_SIEVE.get()), new ItemStack(EBlocks.MANGROVE_SIEVE.get()), new ItemStack(EBlocks.CHERRY_SIEVE.get()), new ItemStack(EBlocks.BAMBOO_SIEVE.get()), new ItemStack(EBlocks.CRIMSON_SIEVE.get()), new ItemStack(EBlocks.WARPED_SIEVE.get())), Component.translatable(TranslationKeys.SIEVE_JEI_INFO));
registration.addItemStackInfo(List.of(new ItemStack(EItems.STRING_MESH.get()), new ItemStack(EItems.STRING_MESH.get()), new ItemStack(EItems.FLINT_MESH.get()), new ItemStack(EItems.IRON_MESH.get()), new ItemStack(EItems.GOLDEN_MESH.get()), new ItemStack(EItems.DIAMOND_MESH.get()), new ItemStack(EItems.NETHERITE_MESH.get())), Component.translatable(TranslationKeys.SIEVE_MESH_JEI_INFO));
registration.addItemStackInfo(List.of(WateringCanItem.getFull(EItems.WOODEN_WATERING_CAN), WateringCanItem.getFull(EItems.STONE_WATERING_CAN), WateringCanItem.getFull(EItems.IRON_WATERING_CAN), WateringCanItem.getFull(EItems.GOLDEN_WATERING_CAN), WateringCanItem.getFull(EItems.DIAMOND_WATERING_CAN), WateringCanItem.getFull(EItems.NETHERITE_WATERING_CAN)), Component.translatable(TranslationKeys.WATERING_CAN_JEI_INFO));

View File

@ -125,6 +125,7 @@ public class EConfig {
public final IntValue simultaneousSieveUsageRange;
public final BooleanValue automatedSieves;
public final DoubleValue barrelProgressStep;
public final BooleanValue witchWaterDirtGenerator;
public final BooleanValue witchWaterNetherrackGenerator;
public final ConfigValue<String> defaultSpawnTreeFeature;
public final BooleanValue useBiomeAppropriateTree;
@ -158,6 +159,9 @@ public class EConfig {
this.barrelProgressStep = builder
.comment("The progress to increment by each tick for barrel composting.")
.defineInRange("barrel_progress_step", 0.004, 0.0f, 1.0f);
this.witchWaterDirtGenerator = builder
.comment("Whether Witch Water forms dirt when water flows into it, allowing for a dirt version of a cobblestone generator.")
.define("witch_water_dirt_generator", false);
this.witchWaterNetherrackGenerator = builder
.comment("Whether Witch Water forms netherrack when lava flows into it, allowing for a netherrack version of a cobblestone generator.")
.define("witch_water_netherrack_generator", true);

View File

@ -51,6 +51,8 @@ class BlockLoot extends BlockLootSubProvider {
}
});
add(EBlocks.INFESTED_LEAVES.get(), noDrop().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1))));
machineDrop(EBlocks.MECHANICAL_HAMMER.get());
machineDrop(EBlocks.MECHANICAL_SIEVE.get());
}

View File

@ -249,10 +249,14 @@ public class Recipes {
// Meshes
recipes.grid3x3(EItems.STRING_MESH.get(), ingredient(Tags.Items.STRING));
mesh(recipes, EItems.FLINT_MESH.get(), ingredient(Items.FLINT));
mesh(recipes, EItems.IRON_MESH.get(), ingredient(Tags.Items.INGOTS_IRON));
mesh(recipes, EItems.GOLDEN_MESH.get(), ingredient(Tags.Items.INGOTS_GOLD));
mesh(recipes, EItems.DIAMOND_MESH.get(), ingredient(Tags.Items.GEMS_DIAMOND));
mesh(recipes, EItems.FLINT_MESH, ingredient(Items.FLINT));
mesh(recipes, EItems.IRON_MESH, ingredient(Tags.Items.INGOTS_IRON));
mesh(recipes, EItems.GOLDEN_MESH, ingredient(Tags.Items.INGOTS_GOLD));
mesh(recipes, EItems.DIAMOND_MESH, ingredient(Tags.Items.GEMS_DIAMOND));
meshUpgrade(recipes, EItems.FLINT_MESH, EItems.STRING_MESH, ingredient(Items.FLINT));
meshUpgrade(recipes, EItems.IRON_MESH, EItems.FLINT_MESH, ingredient(Tags.Items.INGOTS_IRON));
meshUpgrade(recipes, EItems.GOLDEN_MESH, EItems.IRON_MESH, ingredient(Tags.Items.INGOTS_GOLD));
meshUpgrade(recipes, EItems.DIAMOND_MESH, EItems.GOLDEN_MESH, ingredient(Tags.Items.GEMS_DIAMOND));
recipes.netheriteUpgrade(RecipeCategory.MISC, ingredient(EItems.DIAMOND_MESH), EItems.NETHERITE_MESH.get());
// Watering cans
@ -382,8 +386,8 @@ public class Recipes {
});
}
private static void mesh(MKRecipeProvider recipes, Item result, Ingredient ingredient) {
recipes.shapedCrafting(RecipeCategory.MISC, result, recipe -> {
private static void mesh(MKRecipeProvider recipes, Supplier<? extends Item> result, Ingredient ingredient) {
recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> {
recipe.define('#', ingredient);
recipe.define('S', ingredient(Tags.Items.STRING));
recipe.pattern("S#S");
@ -392,6 +396,16 @@ public class Recipes {
});
}
private static void meshUpgrade(MKRecipeProvider recipes, RegistryObject<? extends Item> newMesh, RegistryObject<? extends Item> previousMesh, Ingredient ingredient) {
recipes.shapedCrafting(newMesh.getId().getPath() + "_from_" + previousMesh.getId().getPath(), RecipeCategory.MISC, newMesh.get(), recipe -> {
recipe.define('#', ingredient);
recipe.define('M', previousMesh.get());
recipe.pattern(" # ");
recipe.pattern("#M#");
recipe.pattern(" # ");
});
}
private static void wateringCan(MKRecipeProvider recipes, Supplier<? extends Item> result, Ingredient shell) {
recipes.shapedCrafting(RecipeCategory.TOOLS, result.get(), recipe -> {
recipe.define('#', shell);

View File

@ -18,6 +18,7 @@
package thedarkcolour.exdeorum.event;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
@ -28,12 +29,15 @@ import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.RandomSource;
import net.minecraft.util.Unit;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.levelgen.XoroshiroRandomSource;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
@ -171,6 +175,13 @@ public final class EventHandler {
EFluids.WITCH_WATER_TYPE.get(),
fluidState -> fluidState.isSource() ? Blocks.OBSIDIAN.defaultBlockState() : (EConfig.SERVER.witchWaterNetherrackGenerator.get() ? Blocks.NETHERRACK.defaultBlockState() : Blocks.COBBLESTONE.defaultBlockState())
));
var dirtVariants = new BlockState[]{Blocks.DIRT.defaultBlockState(), Blocks.PODZOL.defaultBlockState(), Blocks.COARSE_DIRT.defaultBlockState()};
var rng = RandomSource.create();
FluidInteractionRegistry.addInteraction(EFluids.WITCH_WATER_TYPE.get(), new FluidInteractionRegistry.InteractionInformation(
(level, pos, relative, state) -> level.getFluidState(relative).getFluidType() == ForgeMod.WATER_TYPE.get() && EConfig.SERVER.witchWaterDirtGenerator.get(),
fluidState -> Util.getRandom(dirtVariants, rng)
));
BarrelMaterial.loadTransparentBlocks();
});
}
@ -232,7 +243,6 @@ public final class EventHandler {
if (ModList.get().isLoaded(ModIds.THE_ONE_PROBE)) {
InterModComms.sendTo(ModIds.THE_ONE_PROBE, "getTheOneProbe", ExDeorumTopCompat::new);
}
// todo instead of doing this, figure out the real reason sorting voids items
if (ModList.get().isLoaded(ModIds.INVENTORY_SORTER)) {
InterModComms.sendTo(ModIds.INVENTORY_SORTER, "slotblacklist", ItemHelper.Slot.class::getName);
}

View File

@ -135,7 +135,7 @@ public class EBlocks {
public static final RegistryObject<WaterCrucibleBlock> MAPLE_CRUCIBLE = registerWaterCrucible("maple_crucible");
// Misc
public static final RegistryObject<InfestedLeavesBlock> INFESTED_LEAVES = BLOCKS.register("infested_leaves", () -> new InfestedLeavesBlock(copy(Blocks.OAK_LEAVES).noLootTable()));
public static final RegistryObject<InfestedLeavesBlock> INFESTED_LEAVES = BLOCKS.register("infested_leaves", () -> new InfestedLeavesBlock(copy(Blocks.OAK_LEAVES)));
public static final RegistryObject<LiquidBlock> WITCH_WATER = BLOCKS.register("witch_water", () -> new WitchWaterBlock(EFluids.WITCH_WATER, copy(Blocks.WATER).mapColor(MapColor.COLOR_PURPLE)));
public static final RegistryObject<EndCakeBlock> END_CAKE = BLOCKS.register("end_cake", () -> new EndCakeBlock(of().noLootTable().mapColor(MapColor.COLOR_BLACK).forceSolidOn().strength(0.5F).sound(SoundType.WOOL).pushReaction(PushReaction.BLOCK)));

View File

@ -238,6 +238,8 @@ public class EItems {
public static final RegistryObject<BlockItem> MAPLE_CRUCIBLE = registerItemBlock(EBlocks.MAPLE_CRUCIBLE);
public static final RegistryObject<BlockItem> END_CAKE = registerItemBlock(EBlocks.END_CAKE);
public static final RegistryObject<BlockItem> INFESTED_LEAVES = registerItemBlock(EBlocks.INFESTED_LEAVES);
public static void addItemsToMainTab(CreativeModeTab.Output output) {
boolean biomesOPlenty = ModList.get().isLoaded(ModIds.BIOMES_O_PLENTY);