Skip to content

Commit

Permalink
添加液体油+油桶
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhuRuoLing committed Oct 6, 2024
1 parent d153e7c commit 0239ab6
Show file tree
Hide file tree
Showing 14 changed files with 363 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/generated/resources/assets/anvilcraft/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
"block.anvilcraft.nesting_shulker_box": "xoᗺ ɹǝʞןnɥS buıʇsǝN",
"block.anvilcraft.nether_dust": "ʇsnᗡ ɹǝɥʇǝN",
"block.anvilcraft.obsidian_cauldron": "uoɹpןnɐƆ uɐıpısqO",
"block.anvilcraft.oil": "ןıO",
"block.anvilcraft.oil_cauldron": "uoɹpןnɐƆ ןıO",
"block.anvilcraft.over_nesting_shulker_box": "xoᗺ ɹǝʞןnɥS buıʇsǝN ɹǝʌO",
"block.anvilcraft.overseer": "ɹǝǝsɹǝʌO",
Expand Down Expand Up @@ -317,6 +318,7 @@
"item.anvilcraft.magnet_ingot": "ʇobuI ʇǝubɐW",
"item.anvilcraft.magnetoelectric_core": "ǝɹoƆ ɔıɹʇɔǝןǝoʇǝubɐW",
"item.anvilcraft.netherite_crystal_nucleus": "snǝןɔnN ןɐʇsʎɹƆ ǝʇıɹǝɥʇǝN",
"item.anvilcraft.oil_bucket": "ʇǝʞɔnᗺ ןıO",
"item.anvilcraft.prismarine_blade": "ǝpɐןᗺ ǝuıɹɐɯsıɹԀ",
"item.anvilcraft.prismarine_cluster": "ɹǝʇsnןƆ ǝuıɹɐɯsıɹԀ",
"item.anvilcraft.raw_lead": "pɐǝꞀ ʍɐᴚ",
Expand Down
2 changes: 2 additions & 0 deletions src/generated/resources/assets/anvilcraft/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
"block.anvilcraft.nesting_shulker_box": "Nesting Shulker Box",
"block.anvilcraft.nether_dust": "Nether Dust",
"block.anvilcraft.obsidian_cauldron": "Obsidian Cauldron",
"block.anvilcraft.oil": "Oil",
"block.anvilcraft.oil_cauldron": "Oil Cauldron",
"block.anvilcraft.over_nesting_shulker_box": "Over Nesting Shulker Box",
"block.anvilcraft.overseer": "Overseer",
Expand Down Expand Up @@ -317,6 +318,7 @@
"item.anvilcraft.magnet_ingot": "Magnet Ingot",
"item.anvilcraft.magnetoelectric_core": "Magnetoelectric Core",
"item.anvilcraft.netherite_crystal_nucleus": "Netherite Crystal Nucleus",
"item.anvilcraft.oil_bucket": "Oil Bucket",
"item.anvilcraft.prismarine_blade": "Prismarine Blade",
"item.anvilcraft.prismarine_cluster": "Prismarine Cluster",
"item.anvilcraft.raw_lead": "Raw Lead",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "anvilcraft:item/oil_bucket"
}
}
21 changes: 21 additions & 0 deletions src/generated/resources/data/anvilcraft/loot_table/blocks/oil.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:air"
}
],
"rolls": 1.0
}
],
"random_sequence": "anvilcraft:blocks/oil"
}
2 changes: 2 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import dev.dubhe.anvilcraft.init.ModEnchantmentEffectComponents;
import dev.dubhe.anvilcraft.init.ModEnchantmentEffects;
import dev.dubhe.anvilcraft.init.ModEntities;
import dev.dubhe.anvilcraft.init.ModFluids;
import dev.dubhe.anvilcraft.init.ModItemGroups;
import dev.dubhe.anvilcraft.init.ModItems;
import dev.dubhe.anvilcraft.init.ModLootContextParamSets;
Expand Down Expand Up @@ -65,6 +66,7 @@ public class AnvilCraft {
public AnvilCraft(IEventBus modEventBus, ModContainer container) {
ModItemGroups.register(modEventBus);
ModBlocks.register();
ModFluids.register(modEventBus);
ModEntities.register();
ModItems.register();
ModBlockEntities.register();
Expand Down
25 changes: 24 additions & 1 deletion src/main/java/dev/dubhe/anvilcraft/block/OilCauldronBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable;
import dev.dubhe.anvilcraft.init.ModBlocks;
import dev.dubhe.anvilcraft.init.ModItemTags;
import dev.dubhe.anvilcraft.init.ModItems;
import dev.dubhe.anvilcraft.util.Util;

import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.cauldron.CauldronInteraction;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.ItemInteractionResult;
Expand All @@ -19,16 +22,22 @@
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.AbstractCauldronBlock;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.BucketPickup;
import net.minecraft.world.level.block.LayeredCauldronBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import org.jetbrains.annotations.Nullable;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class OilCauldronBlock extends LayeredCauldronBlock implements IHammerRemovable {
public class OilCauldronBlock extends LayeredCauldronBlock implements IHammerRemovable, BucketPickup {
public OilCauldronBlock(Properties properties) {
super(Biome.Precipitation.NONE, CauldronInteraction.EMPTY, properties);
}
Expand Down Expand Up @@ -129,4 +138,18 @@ public InteractionResult use(
}
return InteractionResult.PASS;
}

@Override
public ItemStack pickupBlock(@Nullable Player player, LevelAccessor level, BlockPos pos, BlockState state) {
if (state.is(ModBlocks.OIL_CAULDRON.get()) && state.getValue(LayeredCauldronBlock.LEVEL) == 3) {
level.setBlock(pos, Blocks.CAULDRON.defaultBlockState(), 3);
return ModItems.OIL_BUCKET.asStack();
}
return Items.BUCKET.getDefaultInstance();
}

@Override
public Optional<SoundEvent> getPickupSound() {
return Optional.of(SoundEvents.BUCKET_FILL_LAVA);
}
}
13 changes: 12 additions & 1 deletion src/main/java/dev/dubhe/anvilcraft/client/AnvilCraftClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import dev.dubhe.anvilcraft.client.event.GuiLayerRegistrationEventListener;
import dev.dubhe.anvilcraft.config.AnvilCraftConfig;

import dev.dubhe.anvilcraft.fluid.ClientFluidTypeExtensionImpl;
import dev.dubhe.anvilcraft.fluid.OilFluid;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;

import me.shedaniel.autoconfig.AutoConfig;
Expand All @@ -16,10 +19,18 @@
public class AnvilCraftClient {
public AnvilCraftClient(IEventBus modBus, ModContainer container) {
modBus.addListener(GuiLayerRegistrationEventListener::onRegister);

modBus.addListener(AnvilCraftClient::onRegisterClientExtensions);
container.registerExtensionPoint(
IConfigScreenFactory.class,
(c, s) -> AutoConfig.getConfigScreen(AnvilCraftConfig.class, s).get()
);

}

public static void onRegisterClientExtensions(RegisterClientExtensionsEvent event) {
event.registerFluidType(
new ClientFluidTypeExtensionImpl(AnvilCraft.of("block/oil"), AnvilCraft.of("block/oil")),
OilFluid.TYPE
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.dubhe.anvilcraft.fluid;

import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions;

@MethodsReturnNonnullByDefault
public class ClientFluidTypeExtensionImpl implements IClientFluidTypeExtensions {
public final ResourceLocation stillTexture;
public final ResourceLocation flowingTexture;


public ClientFluidTypeExtensionImpl(ResourceLocation stillTexture, ResourceLocation flowingTexture) {
this.stillTexture = stillTexture;
this.flowingTexture = flowingTexture;
}

@Override
public ResourceLocation getFlowingTexture() {
return flowingTexture;
}

@Override
public ResourceLocation getStillTexture() {
return stillTexture;
}
}
156 changes: 156 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/fluid/OilFluid.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package dev.dubhe.anvilcraft.fluid;

import dev.dubhe.anvilcraft.init.ModBlocks;
import dev.dubhe.anvilcraft.init.ModFluids;
import dev.dubhe.anvilcraft.init.ModItems;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.pathfinder.PathType;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.common.SoundActions;
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
import net.neoforged.neoforge.fluids.FluidType;

import javax.annotation.ParametersAreNonnullByDefault;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public abstract class OilFluid extends BaseFlowingFluid {
public static final FluidType TYPE = new FluidType(FluidType.Properties.create()
.descriptionId("block.anvilcraft.oil")
.canSwim(true)
.canDrown(true)
.fallDistanceModifier(0.0F)
.canExtinguish(false)
.pathType(PathType.LAVA)
.adjacentPathType(null)
.sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL_LAVA)
.sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY_LAVA)
.lightLevel(0)
) {
public boolean canConvertToSource(FluidState state, LevelReader reader, BlockPos pos) {
return false;
}

public double motionScale(Entity entity) {
return 0.0023333333333333335;
}

public void setItemMovement(ItemEntity entity) {
Vec3 vec3 = entity.getDeltaMovement();
entity.setDeltaMovement(vec3.x * 0.949999988079071, vec3.y + (double) (vec3.y < 0.05999999865889549 ? 5.0E-4F : 0.0F), vec3.z * 0.949999988079071);
}
};

OilFluid() {
super(
new Properties(
() -> TYPE,
ModFluids.OIL,
ModFluids.FLOWING_OIL
).slopeFindDistance(4)
);
}


@Override
public Item getBucket() {
return ModItems.OIL_BUCKET.asItem();
}

@Override
protected boolean canBeReplacedWith(FluidState fluidState, BlockGetter blockGetter, BlockPos blockPos, Fluid fluid, Direction direction) {
return false;
}

@Override
public int getTickDelay(LevelReader levelReader) {
return 30;
}

@Override
protected float getExplosionResistance() {
return 100f;
}

@Override
protected BlockState createLegacyBlock(FluidState fluidState) {
return ModBlocks.OIL.getDefaultState().setValue(LiquidBlock.LEVEL, getLegacyLevel(fluidState));
}

@Override
public Fluid getFlowing() {
return ModFluids.FLOWING_OIL.get();
}

@Override
public Fluid getSource() {
return ModFluids.OIL.get();
}

@Override
protected void beforeDestroyingBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) {

}

@Override
protected int getSlopeFindDistance(LevelReader levelReader) {
return 4;
}

@Override
protected int getDropOff(LevelReader levelReader) {
return 2;
}

@Override
protected boolean canConvertToSource(Level level) {
return false;
}

@Override
public FluidType getFluidType() {
return TYPE;
}

public static class Source extends OilFluid {

public int getAmount(FluidState state) {
return 8;
}

public boolean isSource(FluidState state) {
return true;
}
}

public static class Flowing extends OilFluid {

protected void createFluidStateDefinition(StateDefinition.Builder<Fluid, FluidState> builder) {
super.createFluidStateDefinition(builder);
builder.add(LEVEL);
}

public int getAmount(FluidState state) {
return state.getValue(LEVEL);
}

public boolean isSource(FluidState state) {
return false;
}
}
}
16 changes: 16 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/init/ModBlocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@
import net.minecraft.util.ColorRGBA;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
Expand All @@ -121,6 +122,7 @@
import net.minecraft.world.level.block.ColoredFallingBlock;
import net.minecraft.world.level.block.HalfTransparentBlock;
import net.minecraft.world.level.block.LayeredCauldronBlock;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.PressurePlateBlock;
import net.minecraft.world.level.block.RotatedPillarBlock;
import net.minecraft.world.level.block.SlabBlock;
Expand All @@ -132,6 +134,7 @@
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockSetType;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.storage.loot.LootPool;
Expand Down Expand Up @@ -2962,6 +2965,19 @@ private static Object2ObjectMap<Color, BlockEntry<WallBlock>> registerReinforced
})
.register();

public static final BlockEntry<LiquidBlock> OIL = REGISTRATE
.block("oil", it -> new LiquidBlock(ModFluids.OIL.get(), it))
.properties(it -> it
.mapColor(MapColor.TERRACOTTA_BLACK)
.replaceable()
.noCollission()
.randomTicks()
.strength(100.0F)
)
.blockstate((ctx, provider) -> {
})
.register();

static {
REGISTRATE.defaultCreativeTab(ModItemGroups.ANVILCRAFT_FUNCTION_BLOCK.getKey());
}
Expand Down
Loading

0 comments on commit 0239ab6

Please sign in to comment.