mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 07:13:28 +01:00
Compare commits
7 commits
43a23883e3
...
f574925a47
Author | SHA1 | Date | |
---|---|---|---|
|
f574925a47 | ||
|
a414bc7ccc | ||
|
5c4e584a73 | ||
|
90cecc8ed8 | ||
|
0d27a4a304 | ||
|
e91c1569ee | ||
|
16cd3a6966 |
37 changed files with 371 additions and 35 deletions
|
@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G
|
|||
org.gradle.daemon=false
|
||||
# Actually Additions
|
||||
|
||||
mod_version=1.3.5
|
||||
mod_version=1.3.6
|
||||
|
||||
# Forge
|
||||
game_version=1.21.1
|
||||
|
|
|
@ -1,10 +1,19 @@
|
|||
// 1.21.1 2024-08-11T19:30:01.8308187 Registries
|
||||
// 1.21.1 2024-10-22T22:13:28.2925645 Registries
|
||||
74628b34b75e1a2fa2ac1f6282b7d9d4e155c254 data/actuallyadditions/banner_pattern/book.json
|
||||
899dfa1e0d0b15ffc090605543ec144bbfcacc4c data/actuallyadditions/banner_pattern/drill.json
|
||||
7d9a33a9a151ad83de36e9af8822d08c86137adc data/actuallyadditions/banner_pattern/leaf_blo.json
|
||||
2e09aca41de0d283a4db78add64744852788bbeb data/actuallyadditions/banner_pattern/phan_con.json
|
||||
020d2b1f1c21d6c6663ef8126a52e2b9deb0e52e data/actuallyadditions/damage_type/atomicreconstructor.json
|
||||
4ba41428fdcf03f52855029153722e22e8702823 data/actuallyadditions/neoforge/biome_modifier/add_black_quartz.json
|
||||
360756e7cd20afc4c6b2ad58b2fd4f37358f2ee6 data/actuallyadditions/neoforge/biome_modifier/add_canola.json
|
||||
0f06d7aad676a45a4ca187552ac8c4bbd6f1b1b7 data/actuallyadditions/neoforge/biome_modifier/add_coffee.json
|
||||
1401a66bbf2e1daaa459381103ffba9d02be352d data/actuallyadditions/neoforge/biome_modifier/add_flax.json
|
||||
dceca4be717b43a4dfc945f62f5c09622604d7f4 data/actuallyadditions/worldgen/configured_feature/canola_patch.json
|
||||
d56ed72dde226d9ac5eb07fa701f7a3902f1dcf2 data/actuallyadditions/worldgen/configured_feature/coffee_patch.json
|
||||
9a42d5943e40d102c5e9efee988527da3622d88d data/actuallyadditions/worldgen/configured_feature/flax_patch.json
|
||||
80765c24aa747df53139d14a9ac3293b4b3eab16 data/actuallyadditions/worldgen/configured_feature/ore_black_quartz.json
|
||||
0401f9a4edd53ed76536a2c050364a6a442185bd data/actuallyadditions/worldgen/placed_feature/canola_patch.json
|
||||
d7358c6519319ed3950dcdc34102504c53ccaf22 data/actuallyadditions/worldgen/placed_feature/coffee_patch.json
|
||||
fb7baf3c1d721832a9b5bcea7ac7dd3ee2c50118 data/actuallyadditions/worldgen/placed_feature/flax_patch.json
|
||||
efb41395b407edbd91712bcb63976de46fed5d04 data/actuallyadditions/worldgen/placed_feature/ore_black_quartz.json
|
||||
7cf126882346a296f045db75facf741c77b7d3b1 data/actuallyadditions/worldgen/processor_list/engineer_house.json
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
// 1.21.1 2024-10-22T19:46:05.5548254 Update structure files in /structure
|
|
@ -0,0 +1 @@
|
|||
// 1.21.1 2024-10-22T20:41:07.9123026 Update structure files in /structure/
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"type": "actuallyadditions:bool_config_feature_modifier",
|
||||
"biomes": {
|
||||
"type": "neoforge:or",
|
||||
"values": [
|
||||
"#c:is_hot/overworld",
|
||||
"#c:is_sparse_vegetation/overworld"
|
||||
]
|
||||
},
|
||||
"boolConfig": "generateCanola",
|
||||
"features": "actuallyadditions:canola_patch",
|
||||
"step": "vegetal_decoration"
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"type": "actuallyadditions:bool_config_feature_modifier",
|
||||
"biomes": "#c:is_hot/overworld",
|
||||
"boolConfig": "generateCoffee",
|
||||
"features": "actuallyadditions:coffee_patch",
|
||||
"step": "vegetal_decoration"
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"type": "actuallyadditions:bool_config_feature_modifier",
|
||||
"biomes": {
|
||||
"type": "neoforge:or",
|
||||
"values": [
|
||||
"#c:is_dense_vegetation/overworld",
|
||||
"#c:is_cold/overworld"
|
||||
]
|
||||
},
|
||||
"boolConfig": "generateFlax",
|
||||
"features": "actuallyadditions:flax_patch",
|
||||
"step": "vegetal_decoration"
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"type": "minecraft:random_patch",
|
||||
"config": {
|
||||
"feature": {
|
||||
"feature": {
|
||||
"type": "minecraft:simple_block",
|
||||
"config": {
|
||||
"to_place": {
|
||||
"type": "minecraft:simple_state_provider",
|
||||
"state": {
|
||||
"Name": "actuallyadditions:canola",
|
||||
"Properties": {
|
||||
"age": "7"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:block_predicate_filter",
|
||||
"predicate": {
|
||||
"type": "minecraft:matching_blocks",
|
||||
"blocks": "minecraft:air"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tries": 10,
|
||||
"xz_spread": 7,
|
||||
"y_spread": 3
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"type": "minecraft:random_patch",
|
||||
"config": {
|
||||
"feature": {
|
||||
"feature": {
|
||||
"type": "minecraft:simple_block",
|
||||
"config": {
|
||||
"to_place": {
|
||||
"type": "minecraft:simple_state_provider",
|
||||
"state": {
|
||||
"Name": "actuallyadditions:coffee",
|
||||
"Properties": {
|
||||
"age": "7"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:block_predicate_filter",
|
||||
"predicate": {
|
||||
"type": "minecraft:matching_blocks",
|
||||
"blocks": "minecraft:air"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tries": 6,
|
||||
"xz_spread": 7,
|
||||
"y_spread": 3
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"type": "minecraft:random_patch",
|
||||
"config": {
|
||||
"feature": {
|
||||
"feature": {
|
||||
"type": "minecraft:simple_block",
|
||||
"config": {
|
||||
"to_place": {
|
||||
"type": "minecraft:simple_state_provider",
|
||||
"state": {
|
||||
"Name": "actuallyadditions:flax",
|
||||
"Properties": {
|
||||
"age": "7"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:block_predicate_filter",
|
||||
"predicate": {
|
||||
"type": "minecraft:matching_blocks",
|
||||
"blocks": "minecraft:air"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"tries": 8,
|
||||
"xz_spread": 7,
|
||||
"y_spread": 3
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"feature": "actuallyadditions:canola_patch",
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:noise_threshold_count",
|
||||
"above_noise": 10,
|
||||
"below_noise": 5,
|
||||
"noise_level": -0.8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:heightmap",
|
||||
"heightmap": "WORLD_SURFACE_WG"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:biome"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"feature": "actuallyadditions:coffee_patch",
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:noise_threshold_count",
|
||||
"above_noise": 10,
|
||||
"below_noise": 5,
|
||||
"noise_level": -0.8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:heightmap",
|
||||
"heightmap": "WORLD_SURFACE_WG"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:biome"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"feature": "actuallyadditions:flax_patch",
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:noise_threshold_count",
|
||||
"above_noise": 10,
|
||||
"below_noise": 5,
|
||||
"noise_level": -0.8
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:heightmap",
|
||||
"heightmap": "WORLD_SURFACE_WG"
|
||||
},
|
||||
{
|
||||
"type": "minecraft:biome"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -20,6 +20,7 @@ import net.minecraft.data.PackOutput;
|
|||
import net.minecraft.data.registries.VanillaRegistries;
|
||||
import net.minecraft.world.damagesource.DamageType;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModList;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
|
||||
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||
|
@ -67,6 +68,7 @@ public class ActuallyAdditionsData {
|
|||
|
||||
generator.addProvider(true, new SoundsGenerator(packOutput, helper));
|
||||
|
||||
if (ModList.get().isLoaded("patchouli"))
|
||||
generator.addProvider(true, new PatchouliGenerator(packOutput, lookupProvider));
|
||||
|
||||
generator.addProvider(true, new GlobalLootModifierGenerator(packOutput, lookupProvider));
|
||||
|
|
|
@ -73,8 +73,6 @@ import net.neoforged.neoforge.client.settings.KeyConflictContext;
|
|||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class ActuallyAdditionsClient {
|
||||
private static final KeyMapping OPEN_CRAFTING_KEY = new KeyMapping("key.actualladditions.crafting_stick_open.desc", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, -1, "key.actuallyadditions.category");
|
||||
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
package de.ellpeck.actuallyadditions.mod.blocks.base;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.WorldGenRegion;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraft.world.level.block.CropBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
@ -17,4 +22,12 @@ public class AACrops extends CropBlock {
|
|||
protected ItemLike getBaseSeedId() {
|
||||
return this.itemSupplier.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean mayPlaceOn(BlockState state, BlockGetter level, BlockPos pos) {
|
||||
if (level instanceof WorldGenRegion) {
|
||||
return state.is(BlockTags.DIRT);
|
||||
}
|
||||
return super.mayPlaceOn(state, level, pos);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base;
|
|||
import de.ellpeck.actuallyadditions.mod.config.CommonConfig;
|
||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
|
||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
|
|
@ -72,11 +72,17 @@ public class CommonConfig {
|
|||
|
||||
public static class Worldgen {
|
||||
public static ModConfigSpec.BooleanValue GENERATE_QUARTZ;
|
||||
public static ModConfigSpec.BooleanValue GENERATE_CANOLA;
|
||||
public static ModConfigSpec.BooleanValue GENERATE_FLAX;
|
||||
public static ModConfigSpec.BooleanValue GENERATE_COFFEE;
|
||||
|
||||
public static void build() {
|
||||
BUILDER.comment("Worldgen Settings").push("worldgenSettings");
|
||||
|
||||
GENERATE_QUARTZ = BUILDER.comment("Should Black Quartz generate in the world?").define("laserRelayLoss", true);
|
||||
GENERATE_QUARTZ = BUILDER.comment("Should Black Quartz generate in the world?").define("generateQuartz", true);
|
||||
GENERATE_CANOLA = BUILDER.comment("Should Canola generate in the World?").define("generateCanola", true);
|
||||
GENERATE_FLAX = BUILDER.comment("Should Flax generate in the world?").define("generateFlax", true);
|
||||
GENERATE_COFFEE = BUILDER.comment("Should Coffee generate in the world?").define("generateCoffee", true);
|
||||
|
||||
BUILDER.pop();
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade;
|
|||
import de.ellpeck.actuallyadditions.mod.tile.IEnergyDisplay;
|
||||
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
|
||||
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import io.netty.util.internal.ConcurrentSet;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
|
|
@ -16,11 +16,13 @@ import net.minecraft.world.level.biome.Biome;
|
|||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.neoforge.common.Tags;
|
||||
import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
import net.neoforged.neoforge.common.world.BiomeModifier;
|
||||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
import net.neoforged.neoforge.registries.NeoForgeRegistries;
|
||||
import net.neoforged.neoforge.registries.holdersets.OrHolderSet;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
@ -46,6 +48,12 @@ public final class ActuallyBiomeModifiers {
|
|||
|
||||
protected static final ResourceKey<BiomeModifier> ADD_BLACK_QUARTZ_ORE_MODIFIER = ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS,
|
||||
ActuallyAdditions.modLoc("add_black_quartz"));
|
||||
protected static final ResourceKey<BiomeModifier> ADD_CANOLA = ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS,
|
||||
ActuallyAdditions.modLoc("add_canola"));
|
||||
protected static final ResourceKey<BiomeModifier> ADD_FLAX = ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS,
|
||||
ActuallyAdditions.modLoc("add_flax"));
|
||||
protected static final ResourceKey<BiomeModifier> ADD_COFFEE = ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS,
|
||||
ActuallyAdditions.modLoc("add_coffee"));
|
||||
|
||||
public static void bootstrap(BootstrapContext<BiomeModifier> context) {
|
||||
HolderGetter<Biome> biomeGetter = context.lookup(Registries.BIOME);
|
||||
|
@ -58,5 +66,20 @@ public final class ActuallyBiomeModifiers {
|
|||
HolderSet.direct(placedGetter.getOrThrow(ActuallyPlacedFeatures.PLACED_ORE_BLACK_QUARTZ)),
|
||||
GenerationStep.Decoration.UNDERGROUND_ORES, "generateQuartz"
|
||||
));
|
||||
context.register(ADD_CANOLA, new BoolConfigFeatureBiomeModifier(
|
||||
new OrHolderSet<>(biomeGetter.getOrThrow(Tags.Biomes.IS_HOT_OVERWORLD), biomeGetter.getOrThrow(Tags.Biomes.IS_SPARSE_VEGETATION_OVERWORLD)),
|
||||
HolderSet.direct(placedGetter.getOrThrow(ActuallyPlacedFeatures.CANOLA_PATCH)),
|
||||
GenerationStep.Decoration.VEGETAL_DECORATION, "generateCanola"
|
||||
));
|
||||
context.register(ADD_FLAX, new BoolConfigFeatureBiomeModifier(
|
||||
new OrHolderSet<>(biomeGetter.getOrThrow(Tags.Biomes.IS_DENSE_VEGETATION_OVERWORLD), biomeGetter.getOrThrow(Tags.Biomes.IS_COLD_OVERWORLD)),
|
||||
HolderSet.direct(placedGetter.getOrThrow(ActuallyPlacedFeatures.FLAX_PATCH)),
|
||||
GenerationStep.Decoration.VEGETAL_DECORATION, "generateFlax"
|
||||
));
|
||||
context.register(ADD_COFFEE, new BoolConfigFeatureBiomeModifier(
|
||||
biomeGetter.getOrThrow(Tags.Biomes.IS_HOT_OVERWORLD),
|
||||
HolderSet.direct(placedGetter.getOrThrow(ActuallyPlacedFeatures.COFFEE_PATCH)),
|
||||
GenerationStep.Decoration.VEGETAL_DECORATION, "generateCoffee"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,20 @@ package de.ellpeck.actuallyadditions.mod.gen;
|
|||
|
||||
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
|
||||
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
||||
import de.ellpeck.actuallyadditions.mod.blocks.base.AACrops;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.data.worldgen.BootstrapContext;
|
||||
import net.minecraft.data.worldgen.features.FeatureUtils;
|
||||
import net.minecraft.data.worldgen.placement.PlacementUtils;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest;
|
||||
|
||||
|
@ -17,6 +23,9 @@ import java.util.List;
|
|||
|
||||
public class ActuallyConfiguredFeatures {
|
||||
public static final ResourceKey<ConfiguredFeature<?, ?>> ORE_BLACK_QUARTZ = createKey("ore_black_quartz");
|
||||
public static final ResourceKey<ConfiguredFeature<?, ?>> CANOLA_PATCH = createKey("canola_patch");
|
||||
public static final ResourceKey<ConfiguredFeature<?, ?>> FLAX_PATCH = createKey("flax_patch");
|
||||
public static final ResourceKey<ConfiguredFeature<?, ?>> COFFEE_PATCH = createKey("coffee_patch");
|
||||
|
||||
public static void bootstrap(BootstrapContext<ConfiguredFeature<?, ?>> context) {
|
||||
RuleTest stoneRuleTest = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES);
|
||||
|
@ -26,6 +35,16 @@ public class ActuallyConfiguredFeatures {
|
|||
OreConfiguration.target(deepslateRuleTest, ActuallyBlocks.BLACK_QUARTZ_ORE.get().defaultBlockState())
|
||||
);
|
||||
FeatureUtils.register(context, ORE_BLACK_QUARTZ, Feature.ORE, new OreConfiguration(list, 6));
|
||||
FeatureUtils.register(context, CANOLA_PATCH, Feature.RANDOM_PATCH, plantPatch(ActuallyBlocks.CANOLA.get(), 10));
|
||||
FeatureUtils.register(context, FLAX_PATCH, Feature.RANDOM_PATCH, plantPatch(ActuallyBlocks.FLAX.get(), 8));
|
||||
FeatureUtils.register(context, COFFEE_PATCH, Feature.RANDOM_PATCH, plantPatch(ActuallyBlocks.COFFEE.get(), 6));
|
||||
}
|
||||
|
||||
private static RandomPatchConfiguration plantPatch(Block crop, int tries) {
|
||||
BlockStateProvider stateProvider = BlockStateProvider.simple(crop.defaultBlockState().setValue(AACrops.AGE, AACrops.MAX_AGE));
|
||||
return FeatureUtils.simpleRandomPatchConfiguration(
|
||||
tries, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(stateProvider))
|
||||
);
|
||||
}
|
||||
|
||||
private static ResourceKey<ConfiguredFeature<?, ?>> createKey(String name) {
|
||||
|
|
|
@ -12,19 +12,55 @@ import net.minecraft.world.level.levelgen.placement.BiomeFilter;
|
|||
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.HeightRangePlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.InSquarePlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.NoiseThresholdCountPlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
|
||||
import net.minecraft.world.level.levelgen.placement.RarityFilter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ActuallyPlacedFeatures {
|
||||
public static final ResourceKey<PlacedFeature> PLACED_ORE_BLACK_QUARTZ = createKey("ore_black_quartz");
|
||||
public static final ResourceKey<PlacedFeature> CANOLA_PATCH = createKey("canola_patch");
|
||||
public static final ResourceKey<PlacedFeature> FLAX_PATCH = createKey("flax_patch");
|
||||
public static final ResourceKey<PlacedFeature> COFFEE_PATCH = createKey("coffee_patch");
|
||||
|
||||
public static void bootstrap(BootstrapContext<PlacedFeature> context) {
|
||||
HolderGetter<ConfiguredFeature<?, ?>> holdergetter = context.lookup(Registries.CONFIGURED_FEATURE);
|
||||
|
||||
PlacementUtils.register(context, PLACED_ORE_BLACK_QUARTZ, holdergetter.getOrThrow(ActuallyConfiguredFeatures.ORE_BLACK_QUARTZ),
|
||||
commonOrePlacement(8, HeightRangePlacement.triangle(VerticalAnchor.absolute(-25), VerticalAnchor.absolute(45))));
|
||||
|
||||
PlacementUtils.register(
|
||||
context,
|
||||
CANOLA_PATCH,
|
||||
holdergetter.getOrThrow(ActuallyConfiguredFeatures.CANOLA_PATCH),
|
||||
RarityFilter.onAverageOnceEvery(8),
|
||||
NoiseThresholdCountPlacement.of(-0.8, 5, 10),
|
||||
InSquarePlacement.spread(),
|
||||
PlacementUtils.HEIGHTMAP_WORLD_SURFACE,
|
||||
BiomeFilter.biome()
|
||||
);
|
||||
PlacementUtils.register(
|
||||
context,
|
||||
FLAX_PATCH,
|
||||
holdergetter.getOrThrow(ActuallyConfiguredFeatures.FLAX_PATCH),
|
||||
RarityFilter.onAverageOnceEvery(8),
|
||||
NoiseThresholdCountPlacement.of(-0.8, 5, 10),
|
||||
InSquarePlacement.spread(),
|
||||
PlacementUtils.HEIGHTMAP_WORLD_SURFACE,
|
||||
BiomeFilter.biome()
|
||||
);
|
||||
PlacementUtils.register(
|
||||
context,
|
||||
COFFEE_PATCH,
|
||||
holdergetter.getOrThrow(ActuallyConfiguredFeatures.COFFEE_PATCH),
|
||||
RarityFilter.onAverageOnceEvery(8),
|
||||
NoiseThresholdCountPlacement.of(-0.8, 5, 10),
|
||||
InSquarePlacement.spread(),
|
||||
PlacementUtils.HEIGHTMAP_WORLD_SURFACE,
|
||||
BiomeFilter.biome()
|
||||
);
|
||||
}
|
||||
|
||||
private static List<PlacementModifier> orePlacement(PlacementModifier modifier, PlacementModifier modifier1) {
|
||||
|
|
|
@ -29,6 +29,12 @@ public record BoolConfigFeatureBiomeModifier(HolderSet<Biome> biomes, HolderSet<
|
|||
return true;
|
||||
case "generateQuartz":
|
||||
return CommonConfig.Worldgen.GENERATE_QUARTZ.get();
|
||||
case "generateCanola":
|
||||
return CommonConfig.Worldgen.GENERATE_CANOLA.get();
|
||||
case "generateFlax":
|
||||
return CommonConfig.Worldgen.GENERATE_FLAX.get();
|
||||
case "generateCoffee":
|
||||
return CommonConfig.Worldgen.GENERATE_COFFEE.get();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ import net.neoforged.neoforge.capabilities.Capabilities;
|
|||
import net.neoforged.neoforge.energy.IEnergyStorage;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
|
|
@ -61,9 +61,9 @@ public class ItemCoffee extends ItemBase { //TODO: Do we want to change the satu
|
|||
public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) {
|
||||
ItemStack theStack = stack.copy();
|
||||
super.finishUsingItem(stack, level, livingEntity);
|
||||
applyPotionEffectsFromStack(stack, livingEntity);
|
||||
applyPotionEffectsFromStack(theStack, livingEntity);
|
||||
theStack.setDamageValue(theStack.getDamageValue() + 1);
|
||||
if (theStack.getMaxDamage() - theStack.getDamageValue() < 0) {
|
||||
if (theStack.getMaxDamage() - theStack.getDamageValue() <= 0) {
|
||||
return new ItemStack(ActuallyItems.EMPTY_CUP.get());
|
||||
} else {
|
||||
return theStack;
|
||||
|
|
|
@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items.lens;
|
|||
import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor;
|
||||
import de.ellpeck.actuallyadditions.api.lens.Lens;
|
||||
import de.ellpeck.actuallyadditions.mod.crafting.ColorChangeRecipe;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
|
|
|
@ -109,18 +109,32 @@ public class MethodHandler implements IMethodHandler {
|
|||
@Override
|
||||
public void addEffectProperties(ItemStack stack, MobEffectInstance effect, boolean addDur, boolean addAmp) {
|
||||
MobEffectInstance[] effects = this.getEffectsFromStack(stack);
|
||||
boolean effectUpdated = false;
|
||||
for (int i = 0; i < effects.length; i++) {
|
||||
if (effects[i].getEffect() == effect.getEffect()) {
|
||||
effects[i] = new MobEffectInstance(effects[i].getEffect(), effects[i].getDuration() + (addDur
|
||||
? effect.getDuration()
|
||||
: 0), effects[i].getAmplifier() + (addAmp
|
||||
? effect.getAmplifier() > 0
|
||||
? effect.getAmplifier()
|
||||
: 1
|
||||
: 0));
|
||||
effects[i] = new MobEffectInstance(effects[i].getEffect(),
|
||||
effects[i].getDuration() + (addDur ? effect.getDuration() : 0),
|
||||
effects[i].getAmplifier() + (addAmp ? effect.getAmplifier() > 0 ? effect.getAmplifier() : 1 : 0));
|
||||
effectUpdated = true;
|
||||
break;
|
||||
}
|
||||
this.addEffectToStack(stack, effects[i]);
|
||||
}
|
||||
if (!effectUpdated) {
|
||||
this.addEffectToStack(stack, effect);
|
||||
} else {
|
||||
// Clear existing effects from the stack
|
||||
this.clearEffectsFromStack(stack);
|
||||
// Add updated effects to the stack
|
||||
for (MobEffectInstance updatedEffect : effects) {
|
||||
this.addEffectToStack(stack, updatedEffect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void clearEffectsFromStack(ItemStack stack) {
|
||||
CompoundTag tag = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag();
|
||||
tag.remove("Counter");
|
||||
stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -10,12 +10,9 @@
|
|||
|
||||
package de.ellpeck.actuallyadditions.mod.misc.special;
|
||||
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.neoforged.bus.api.EventPriority;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.neoforge.client.event.RenderPlayerEvent;
|
||||
|
|
|
@ -26,6 +26,7 @@ import net.minecraft.world.entity.player.Inventory;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
@ -102,7 +103,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements MenuPr
|
|||
}
|
||||
|
||||
private void doWork() {
|
||||
Direction side = WorldUtil.getDirectionByPistonRotation(this.level.getBlockState(this.worldPosition));
|
||||
Direction side = WorldUtil.getDirectionByPistonRotation(getBlockState());
|
||||
BlockPos breakCoords = this.worldPosition.relative(side);
|
||||
BlockState stateToBreak = this.level.getBlockState(breakCoords);
|
||||
Block blockToBreak = stateToBreak.getBlock();
|
||||
|
@ -110,6 +111,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements MenuPr
|
|||
if (!this.isPlacer && blockToBreak != Blocks.AIR && stateToBreak.getDestroySpeed(this.level, breakCoords) >= 0.0F) {
|
||||
List<ItemStack> drops = Block.getDrops(stateToBreak, (ServerLevel) this.level, breakCoords, this.level.getBlockEntity(breakCoords));
|
||||
FakePlayer fake = FakePlayerFactory.getMinecraft((ServerLevel) this.level);
|
||||
fake.getInventory().items.set(fake.getInventory().selected, Items.NETHERITE_PICKAXE.getDefaultInstance());
|
||||
if (stateToBreak.canHarvestBlock(this.level, breakCoords, fake)) { //TODO might double check this is right mikey
|
||||
if (StackUtil.canAddAll(this.inv, drops, false)) {
|
||||
this.level.destroyBlock(breakCoords, false);
|
||||
|
|
|
@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyTags;
|
|||
import de.ellpeck.actuallyadditions.mod.AASounds;
|
||||
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
||||
import de.ellpeck.actuallyadditions.mod.crafting.CoffeeIngredientRecipe;
|
||||
import de.ellpeck.actuallyadditions.mod.fluids.AATank;
|
||||
import de.ellpeck.actuallyadditions.mod.inventory.ContainerCoffeeMachine;
|
||||
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
|
||||
import de.ellpeck.actuallyadditions.mod.items.ItemCoffee;
|
||||
|
@ -41,7 +42,6 @@ import net.neoforged.neoforge.energy.IEnergyStorage;
|
|||
import net.neoforged.neoforge.fluids.FluidStack;
|
||||
import net.neoforged.neoforge.fluids.FluidType;
|
||||
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
|
||||
import net.neoforged.neoforge.fluids.capability.templates.FluidTank;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -59,7 +59,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
|
||||
public final CustomEnergyStorage storage = new CustomEnergyStorage(300000, 250, 0);
|
||||
|
||||
public final FluidTank tank = new FluidTank(4 * FluidType.BUCKET_VOLUME) {
|
||||
public final AATank tank = new AATank(4 * FluidType.BUCKET_VOLUME) {
|
||||
@Nonnull
|
||||
@Override
|
||||
public FluidStack drain(int maxDrain, FluidAction action) {
|
||||
|
@ -206,7 +206,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
this.inv.setStackInSlot(SLOT_OUTPUT, output.copy());
|
||||
this.inv.getStackInSlot(SLOT_INPUT).shrink(1);
|
||||
this.coffeeCacheAmount -= CACHE_USE;
|
||||
this.tank.drain(WATER_USE, IFluidHandler.FluidAction.EXECUTE);
|
||||
this.tank.drainInternal(WATER_USE, IFluidHandler.FluidAction.EXECUTE);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile;
|
|||
|
||||
import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem;
|
||||
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
|
|
|
@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile;
|
|||
import de.ellpeck.actuallyadditions.api.laser.Network;
|
||||
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
|
||||
import de.ellpeck.actuallyadditions.mod.network.packet.SpawnLaserParticlePacket;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import de.ellpeck.actuallyadditions.mod.util.WorldUtil;
|
||||
import de.ellpeck.actuallyadditions.mod.util.compat.SlotlessableItemHandlerWrapper;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
|
|
@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.api.laser.LaserType;
|
|||
import de.ellpeck.actuallyadditions.api.laser.Network;
|
||||
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
|
||||
import de.ellpeck.actuallyadditions.mod.misc.apiimpl.ConnectionPair;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import io.netty.util.internal.ConcurrentSet;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
|
|
@ -95,7 +95,7 @@ public class TileEntityLongRangeBreaker extends TileEntityInventoryBase implemen
|
|||
|
||||
private void doWork() {
|
||||
if (this.storage.getEnergyStored() >= ENERGY_USE * RANGE) {
|
||||
BlockState state = this.level.getBlockState(this.worldPosition);
|
||||
BlockState state = getBlockState();
|
||||
Direction sideToManipulate = WorldUtil.getDirectionByPistonRotation(state);
|
||||
|
||||
for (int i = 0; i < RANGE; i++) {
|
||||
|
|
|
@ -30,6 +30,7 @@ import net.minecraft.world.entity.player.Inventory;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
@ -138,13 +139,13 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements
|
|||
: 1);
|
||||
if (this.storage.getEnergyStored() >= actualUse) {
|
||||
BlockPos pos = new BlockPos(this.worldPosition.getX() + this.checkX, this.checkY, this.worldPosition.getZ() + this.checkZ);
|
||||
ItemStack fakePickaxe = Items.NETHERITE_PICKAXE.getDefaultInstance();
|
||||
|
||||
BlockState state = this.level.getBlockState(pos);
|
||||
Block block = state.getBlock();
|
||||
ItemStack stack = block.getCloneItemStack(state, new BlockHitResult(new Vec3(0, 0, 0), Direction.DOWN, pos, false), this.level, pos, FakePlayerFactory.getMinecraft((ServerLevel) this.level));
|
||||
if (!state.isAir()) {
|
||||
//block.getHarvestLevel(state) <= DrillItem.HARVEST_LEVEL
|
||||
if (stack.isCorrectToolForDrops(state) && state.getDestroySpeed(this.level, pos) >= 0F && this.isMinable(state, stack)) {
|
||||
if (fakePickaxe.isCorrectToolForDrops(state) && state.getDestroySpeed(this.level, pos) >= 0F && this.isMinable(state, stack)) {
|
||||
List<ItemStack> drops = Block.getDrops(state, (ServerLevel) this.level, pos, this.level.getBlockEntity(pos));
|
||||
float chance = WorldUtil.fireFakeHarvestEventsForDropChance(this, drops, this.level, pos);
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
|
|||
import de.ellpeck.actuallyadditions.mod.items.ItemSolidifiedExperience;
|
||||
import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor;
|
||||
import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA.IAcceptor;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
# 1.3.6+mc1.21.1
|
||||
* Add the ability to open the Crafting Table On A Stick while inside a Curios slot
|
||||
* Add missing XP Solidifier recipe
|
||||
* Fixed All In One tool not having attributes
|
||||
* Fix Engineer's House not generating
|
||||
* Add worldgen of Canola, Flax and Coffee patches (With a config option to disable)
|
||||
* Fix Breaker and Vertical Digger being unable to break blocks tougher than dirt
|
||||
* Fix Coffee Machine not consuming water
|
||||
* Fix Coffee not applying effects
|
||||
* Fix Coffee not transforming into Empty Cup when consumed entirely
|
||||
|
||||
# 1.3.5+mc1.21.1
|
||||
* Overhaul networking, should fix a lot of issues with crashes on servers
|
||||
* Add storage block tags for the crystals
|
||||
|
|
Loading…
Reference in a new issue