steam particles for engine and boilers and fix #12

This commit is contained in:
khj xiaogu 2021-12-03 19:13:15 +08:00
parent 19c47c2b37
commit 1e88851c6b
No known key found for this signature in database
GPG key ID: DEA172814EAFF426
15 changed files with 316 additions and 116 deletions

View file

@ -18,15 +18,21 @@
package com.teammoeg.steampowered;
import com.simibubi.create.foundation.block.BlockStressDefaults;
import javax.annotation.Nonnull;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.simibubi.create.foundation.block.BlockStressValues;
import com.simibubi.create.foundation.data.CreateRegistrate;
import com.simibubi.create.repack.registrate.util.NonNullLazyValue;
import com.teammoeg.steampowered.client.Particles;
import com.teammoeg.steampowered.client.SteamPoweredClient;
import com.teammoeg.steampowered.network.PacketHandler;
import com.teammoeg.steampowered.registrate.SPBlocks;
import com.teammoeg.steampowered.registrate.SPItems;
import com.teammoeg.steampowered.registrate.SPTiles;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
@ -39,10 +45,6 @@ import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.annotation.Nonnull;
// The value here should match an entry in the META-INF/mods.toml file
@Mod("steampowered")
@ -78,7 +80,7 @@ public class SteamPowered {
FluidRegistry.FLUIDS.register(FMLJavaModLoadingContext.get().getModEventBus());
BlockRegistry.BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus());
ItemRegistry.ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
Particles.REGISTER.register(FMLJavaModLoadingContext.get().getModEventBus());
SPBlocks.register();
SPTiles.register();
SPItems.register();

View file

@ -0,0 +1,81 @@
/*
* Copyright (c) 2021 TeamMoeg
*
* This file is part of Frosted Heart.
*
* Frosted Heart 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, version 3.
*
* Frosted Heart 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 Frosted Heart. If not, see <https://www.gnu.org/licenses/>.
*/
package com.teammoeg.steampowered.client;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.particle.IParticleRenderType;
import net.minecraft.client.particle.SpriteTexturedParticle;
import net.minecraft.client.renderer.ActiveRenderInfo;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.util.math.MathHelper;
public class ParticleBase extends SpriteTexturedParticle {
protected float originalScale = 1.3F;
protected ParticleBase(ClientWorld world, double x, double y, double z) {
super(world, x, y, z);
}
public ParticleBase(ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ) {
super(world, x, y, z, motionX, motionY, motionZ);
}
public IParticleRenderType getRenderType() {
return IParticleRenderType.PARTICLE_SHEET_TRANSLUCENT;
}
@Override
public void render(IVertexBuilder worldRendererIn, ActiveRenderInfo entityIn, float pt) {
float age = (this.age + pt) / lifetime * 32.0F;
age = MathHelper.clamp(age, 0.0F, 1.0F);
super.quadSize = originalScale * age;
super.render(worldRendererIn, entityIn, pt);
}
public void tick() {
super.xo = x;
super.yo = y;
super.zo = z;
if (age >= lifetime)
super.remove();
this.age++;
this.yd -= 0.04D * gravity;
move(xd,yd, zd);
if (y == yo) {
this.xd *= 1.1D;
this.zd *= 1.1D;
}
this.xd *= 0.96D;
this.yd *= 0.96D;
this.zd *= 0.96D;
if (onGround) {
this.xd *= 0.67D;
this.zd *= 0.67D;
}
}
}

View file

@ -0,0 +1,33 @@
/*
* Copyright (c) 2021 TeamMoeg
*
* This file is part of Frosted Heart.
*
* Frosted Heart 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, version 3.
*
* Frosted Heart 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 Frosted Heart. If not, see <https://www.gnu.org/licenses/>.
*/
package com.teammoeg.steampowered.client;
import com.teammoeg.steampowered.SteamPowered;
import net.minecraft.particles.BasicParticleType;
import net.minecraft.particles.ParticleType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
public class Particles {
public static final DeferredRegister<ParticleType<?>> REGISTER = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, SteamPowered.MODID);
public static final RegistryObject<BasicParticleType> STEAM = REGISTER.register("steam", () -> new BasicParticleType(false));
}

View file

@ -0,0 +1,51 @@
/*
* Copyright (c) 2021 TeamMoeg
*
* This file is part of Frosted Heart.
*
* Frosted Heart 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, version 3.
*
* Frosted Heart 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 Frosted Heart. If not, see <https://www.gnu.org/licenses/>.
*/
package com.teammoeg.steampowered.client;
import net.minecraft.client.particle.IAnimatedSprite;
import net.minecraft.client.particle.IParticleFactory;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.particles.BasicParticleType;
public class SteamParticle extends ParticleBase {
public SteamParticle(ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ) {
super(world, x, y, z, motionX, motionY, motionZ);
this.gravity = -0.1F;
this.rCol = this.gCol = this.bCol = (float) (Math.random() * 0.4) + 0.4f;
this.originalScale = 0.25F;
this.lifetime= (int) (12.0D / (Math.random() * 0.8D + 0.2D));
}
public static class Factory implements IParticleFactory<BasicParticleType> {
private final IAnimatedSprite spriteSet;
public Factory(IAnimatedSprite spriteSet) {
this.spriteSet = spriteSet;
}
@Override
public Particle createParticle(BasicParticleType typeIn, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) {
SteamParticle steamParticle = new SteamParticle(worldIn, x, y, z, xSpeed, ySpeed, zSpeed);
steamParticle.pickSprite(this.spriteSet);
return steamParticle;
}
}
}

View file

@ -22,13 +22,10 @@ import com.teammoeg.steampowered.FluidRegistry;
import com.teammoeg.steampowered.block.SPBlockPartials;
import com.teammoeg.steampowered.ponder.SPPonderIndex;
import com.teammoeg.steampowered.registrate.SPBlocks;
import com.teammoeg.steampowered.registrate.SPItems;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.item.Item;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@ -37,12 +34,15 @@ public class SteamPoweredClient {
SPBlockPartials.clientInit();
modEventBus.addListener(SteamPoweredClient::clientInit);
modEventBus.addListener(SteamPoweredClient::setupRenderType);
modEventBus.addListener(SteamPoweredClient::registerParticleFactories);
}
public static void clientInit(FMLClientSetupEvent event) {
SPPonderIndex.register();
}
public static void registerParticleFactories(ParticleFactoryRegisterEvent event) {
Minecraft.getInstance().particleEngine.register(Particles.STEAM.get(), SteamParticle.Factory::new);
}
public static void setupRenderType(FMLClientSetupEvent event) {
event.enqueueWork(() -> {
RenderTypeLookup.setRenderLayer(FluidRegistry.steam.get(), RenderType.translucent());

View file

@ -19,11 +19,13 @@
package com.teammoeg.steampowered.content.boiler;
import java.util.List;
import java.util.Random;
import com.simibubi.create.foundation.item.ItemDescription.Palette;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.item.TooltipHelper;
import com.teammoeg.steampowered.client.ClientUtils;
import com.teammoeg.steampowered.client.Particles;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
@ -37,6 +39,9 @@ import net.minecraft.fluid.FluidState;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
@ -47,86 +52,106 @@ import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
public abstract class BoilerBlock extends Block implements ILiquidContainer{
@Override
public boolean canPlaceLiquid(IBlockReader w, BlockPos p, BlockState s,Fluid f) {
TileEntity te=w.getBlockEntity(p);
if(te instanceof BoilerTileEntity) {
BoilerTileEntity boiler=(BoilerTileEntity)te;
if(boiler.input.fill(new FluidStack(f,1000),FluidAction.SIMULATE)==1000)
public abstract class BoilerBlock extends Block implements ILiquidContainer {
@Override
public boolean canPlaceLiquid(IBlockReader w, BlockPos p, BlockState s, Fluid f) {
TileEntity te = w.getBlockEntity(p);
if (te instanceof BoilerTileEntity) {
BoilerTileEntity boiler = (BoilerTileEntity) te;
if (boiler.input.fill(new FluidStack(f, 1000), FluidAction.SIMULATE) == 1000)
return true;
}
return false;
}
return false;
}
@Override
public boolean placeLiquid(IWorld w, BlockPos p, BlockState s,
FluidState f){
TileEntity te=w.getBlockEntity(p);
if(te instanceof BoilerTileEntity) {
BoilerTileEntity boiler=(BoilerTileEntity)te;
if(boiler.input.fill(new FluidStack(f.getType(),1000),FluidAction.SIMULATE)==1000) {
boiler.input.fill(new FluidStack(f.getType(),1000),FluidAction.EXECUTE);
public boolean placeLiquid(IWorld w, BlockPos p, BlockState s, FluidState f) {
TileEntity te = w.getBlockEntity(p);
if (te instanceof BoilerTileEntity) {
BoilerTileEntity boiler = (BoilerTileEntity) te;
if (boiler.input.fill(new FluidStack(f.getType(), 1000), FluidAction.SIMULATE) == 1000) {
boiler.input.fill(new FluidStack(f.getType(), 1000), FluidAction.EXECUTE);
return true;
}
}
return false;
}
@Override
public void animateTick(BlockState p_180655_1_, World p_180655_2_, BlockPos p_180655_3_, Random p_180655_4_) {
TileEntity te = p_180655_2_.getBlockEntity(p_180655_3_);
if (te instanceof BoilerTileEntity) {
BoilerTileEntity boiler = (BoilerTileEntity) te;
if (boiler.output.getFluidAmount()>=10000) {//steam leaking
double d0 = p_180655_3_.getX();
double d1 = p_180655_3_.getY() + 1;
double d2 = p_180655_3_.getZ();
if(p_180655_4_.nextDouble()<0.1D)
p_180655_2_.playLocalSound(d0, d1, d2, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 1.0F, 0.25F, false);
p_180655_2_.addParticle(Particles.STEAM.get(), d0+p_180655_4_.nextFloat(), d1, d2+p_180655_4_.nextFloat(), 0.0D, 0.0D, 0.0D);
}
}
}
@Override
public boolean hasAnalogOutputSignal(BlockState p_149740_1_) {
return true;
}
public BoilerBlock(Properties properties) {
super(properties);
}
@Override
public int getAnalogOutputSignal(BlockState b, World w, BlockPos p) {
TileEntity te=w.getBlockEntity(p);
if(te instanceof BoilerTileEntity) {
BoilerTileEntity boiler=(BoilerTileEntity)te;
return boiler.output.getFluidAmount()*15/boiler.output.getCapacity();
}
return super.getAnalogOutputSignal(b,w,p);
super(properties);
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
public abstract int getHuConsume() ;
@Override
public void appendHoverText(ItemStack i, IBlockReader w, List<ITextComponent> t,
ITooltipFlag f) {
if(Screen.hasShiftDown()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.brief").withStyle(TextFormatting.GOLD));
if(ClientUtils.hasGoggles()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.danger").withStyle(TextFormatting.RED));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.huconsume",this.getHuConsume()).withStyle(TextFormatting.GOLD));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.waterconsume",((int)Math.ceil(this.getHuConsume()/120.0))).withStyle(TextFormatting.AQUA));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.steamproduce",this.getHuConsume()/10).withStyle(TextFormatting.GOLD));
}
}else {
t.add(TooltipHelper.holdShift(Palette.Gray,false));
}
if(Screen.hasControlDown()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.redstone").withStyle(TextFormatting.RED));
}else {
t.add(Lang.translate("tooltip.holdForControls", Lang.translate("tooltip.keyCtrl")
.withStyle(TextFormatting.GRAY))
.withStyle(TextFormatting.DARK_GRAY));
}
super.appendHoverText(i,w,t,f);
public int getAnalogOutputSignal(BlockState b, World w, BlockPos p) {
TileEntity te = w.getBlockEntity(p);
if (te instanceof BoilerTileEntity) {
BoilerTileEntity boiler = (BoilerTileEntity) te;
return boiler.output.getFluidAmount() * 15 / boiler.output.getCapacity();
}
return super.getAnalogOutputSignal(b, w, p);
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
public abstract int getHuConsume();
@Override
public void appendHoverText(ItemStack i, IBlockReader w, List<ITextComponent> t, ITooltipFlag f) {
if (Screen.hasShiftDown()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.brief").withStyle(TextFormatting.GOLD));
if (ClientUtils.hasGoggles()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.danger").withStyle(TextFormatting.RED));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.huconsume", this.getHuConsume())
.withStyle(TextFormatting.GOLD));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.waterconsume",
((int) Math.ceil(this.getHuConsume() / 120.0))).withStyle(TextFormatting.AQUA));
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.steamproduce", this.getHuConsume() / 10)
.withStyle(TextFormatting.GOLD));
}
} else {
t.add(TooltipHelper.holdShift(Palette.Gray, false));
}
if (Screen.hasControlDown()) {
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.redstone").withStyle(TextFormatting.RED));
} else {
t.add(Lang
.translate("tooltip.holdForControls",
Lang.translate("tooltip.keyCtrl").withStyle(TextFormatting.GRAY))
.withStyle(TextFormatting.DARK_GRAY));
}
super.appendHoverText(i, w, t, f);
}
@Override
public void stepOn(World w, BlockPos bp, Entity e) {
TileEntity te=w.getBlockEntity(bp);
if(te instanceof BoilerTileEntity&&e instanceof LivingEntity) {
if(((BoilerTileEntity) te).lastheat>0||(!((BoilerTileEntity) te).output.isEmpty())) {
e.hurt(DamageSource.HOT_FLOOR,2);
TileEntity te = w.getBlockEntity(bp);
if (te instanceof BoilerTileEntity && e instanceof LivingEntity) {
if (((BoilerTileEntity) te).lastheat > 0 || (!((BoilerTileEntity) te).output.isEmpty())) {
e.hurt(DamageSource.HOT_FLOOR, 2);
}
}
}

View file

@ -43,19 +43,8 @@ import net.minecraftforge.fluids.capability.templates.FluidTank;
import java.util.List;
public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiver, ITickableTileEntity, IHaveGoggleInformation {
FluidTank input = new FluidTank(10000,s->s.getFluid() == Fluids.WATER) {
@Override
public FluidStack getFluid() {
return new FluidStack(Fluids.WATER,this.getFluidAmount());
}
};
FluidTank output = new FluidTank(10000) {
@Override
public FluidStack getFluid() {
return new FluidStack(FluidRegistry.steam.get().getFluid(),this.getFluidAmount());
}
};
FluidTank input = new FluidTank(10000,s->s.getFluid() == Fluids.WATER);
FluidTank output = new FluidTank(10000);
private IFluidHandler ft = new IFluidHandler() {
@Override
public int getTanks() {
@ -114,6 +103,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
input.readFromNBT(nbt.getCompound("in"));
output.readFromNBT(nbt.getCompound("out"));
heatreceived = nbt.getInt("hu");
lastheat=nbt.getInt("lasthu");
}
// Easy, easy
@ -121,6 +111,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
nbt.put("in", input.writeToNBT(new CompoundNBT()));
nbt.put("out", output.writeToNBT(new CompoundNBT()));
nbt.putInt("hu", heatreceived);
nbt.putInt("lasthu", lastheat);
}
@Override
@ -159,7 +150,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
public void tick() {
lastheat=heatreceived;
//debug
if (this.level != null && !this.level.isClientSide) {
if (this.level != null && !this.level.isClientSide&&heatreceived!=0) {
int consume = Math.min(getHUPerTick(), heatreceived);
heatreceived = 0;
double waterconsume=(SPConfig.COMMON.steamPerWater.get()*10);
@ -167,6 +158,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
this.output.fill(new FluidStack(FluidRegistry.steam.get().getFluid(), consume / 10), FluidAction.EXECUTE);
this.level.sendBlockUpdated(this.getBlockPos(),this.getBlockState(),this.getBlockState(), 3);
this.setChanged();
}
}

View file

@ -37,6 +37,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.DirectionProperty;
import net.minecraft.state.StateContainer;
@ -46,6 +47,8 @@ import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.text.ITextComponent;
@ -67,6 +70,29 @@ public abstract class BurnerBlock extends Block {
}
@Override
public void animateTick(BlockState bs, World w, BlockPos bp, Random r) {
super.animateTick(bs, w, bp, r);
if (bs.getValue(BurnerBlock.LIT)) {
double d0 = bp.getX() + 0.5D;
double d1 = bp.getY();
double d2 = bp.getZ() + 0.5D;
if (r.nextDouble() < 0.2D) {
w.playLocalSound(d0, d1, d2, SoundEvents.FURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1.0F, 1.0F, false);
}
if (r.nextDouble() < 0.5D) {
Direction direction = bs.getValue(BurnerBlock.FACING);
Direction.Axis direction$axis = direction.getAxis();
double d4 = w.getRandom().nextDouble() * 0.6D - 0.3D;
double d5 = direction$axis == Direction.Axis.X ? direction.getStepX() * 0.52D : d4;
double d6 = w.getRandom().nextDouble() * 6.0D / 16.0D;
double d7 = direction$axis == Direction.Axis.Z ? direction.getStepZ() * 0.52D : d4;
w.addParticle(ParticleTypes.SMOKE, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
w.addParticle(ParticleTypes.FLAME, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
}
}
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
Direction facing = context.getClickedFace();
return this.defaultBlockState().setValue(FACING, facing.getAxis().isVertical() ? context.getHorizontalDirection().getOpposite() : facing).setValue(LIT, Boolean.valueOf(false)).setValue(REDSTONE_LOCKED,false);

View file

@ -125,27 +125,6 @@ public abstract class BurnerTileEntity extends TileEntity implements ITickableTi
@Override
public void tick() {
if (level != null && level.isClientSide) {
BlockState state = this.level.getBlockState(this.worldPosition);
if (state.getValue(BurnerBlock.LIT)) {
double d0 = (double)getBlockPos().getX() + 0.5D;
double d1 = (double)getBlockPos().getY();
double d2 = (double)getBlockPos().getZ() + 0.5D;
if (this.level.getRandom().nextDouble() < 0.1D) {
this.level.playLocalSound(d0, d1, d2, SoundEvents.FURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1.0F, 1.0F, false);
}
Direction direction = state.getValue(BurnerBlock.FACING);
Direction.Axis direction$axis = direction.getAxis();
double d3 = 0.52D;
double d4 = this.level.getRandom().nextDouble() * 0.6D - 0.3D;
double d5 = direction$axis == Direction.Axis.X ? (double)direction.getStepX() * 0.52D : d4;
double d6 = this.level.getRandom().nextDouble() * 6.0D / 16.0D;
double d7 = direction$axis == Direction.Axis.Z ? (double)direction.getStepZ() * 0.52D : d4;
this.level.addParticle(ParticleTypes.SMOKE, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
this.level.addParticle(ParticleTypes.FLAME, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
}
}
if (level != null && !level.isClientSide) {
BlockState state = this.level.getBlockState(this.worldPosition);
int emit = getHuPerTick();
@ -186,6 +165,7 @@ public abstract class BurnerTileEntity extends TileEntity implements ITickableTi
@Override
public boolean addToGoggleTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
tooltip.add(componentSpacing.plainCopy().append(new TranslationTextComponent("tooltip.steampowered.burner.hu", HURemain).withStyle(TextFormatting.GOLD)));
if(!inv.getStackInSlot(0).isEmpty())
tooltip.add(componentSpacing.plainCopy().append(new TranslationTextComponent("tooltip.steampowered.burner.item", inv.getStackInSlot(0).getCount(), inv.getStackInSlot(0).getItem().getName(inv.getStackInSlot(0))).withStyle(TextFormatting.GRAY)));
return true;
}

View file

@ -24,14 +24,15 @@ import com.simibubi.create.AllShapes;
import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineBlock;
import com.teammoeg.steampowered.FluidRegistry;
import com.teammoeg.steampowered.ItemRegistry;
import com.teammoeg.steampowered.client.Particles;
import com.teammoeg.steampowered.registrate.SPTiles;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
@ -95,9 +96,9 @@ public class SteamEngineBlock extends EngineBlock {
@OnlyIn(Dist.CLIENT)
public void animateTick(BlockState p_180655_1_, World p_180655_2_, BlockPos p_180655_3_, Random p_180655_4_) {
if (p_180655_1_.getValue(LIT)) {
double d0 = (double) p_180655_3_.getX() + 0.5D;
double d1 = (double) p_180655_3_.getY();
double d2 = (double) p_180655_3_.getZ() + 0.5D;
double d0 = p_180655_3_.getX() + 0.5D;
double d1 = p_180655_3_.getY();
double d2 = p_180655_3_.getZ() + 0.5D;
if (p_180655_4_.nextDouble() < 0.1D) {
p_180655_2_.playLocalSound(d0, d1, d2, SoundEvents.BLASTFURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1.0F, 1.0F, false);
}
@ -106,10 +107,10 @@ public class SteamEngineBlock extends EngineBlock {
Direction.Axis direction$axis = direction.getAxis();
double d3 = 0.52D;
double d4 = p_180655_4_.nextDouble() * 0.6D - 0.3D;
double d5 = direction$axis == Direction.Axis.X ? (double) direction.getStepX() * 0.52D : d4;
double d5 = direction$axis == Direction.Axis.X ? direction.getStepX() * 0.52D : d4;
double d6 = p_180655_4_.nextDouble() * 9.0D / 16.0D;
double d7 = direction$axis == Direction.Axis.Z ? (double) direction.getStepZ() * 0.52D : d4;
p_180655_2_.addParticle(ParticleTypes.LAVA, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
double d7 = direction$axis == Direction.Axis.Z ? direction.getStepZ() * 0.52D : d4;
p_180655_2_.addParticle(Particles.STEAM.get(), d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
}
}
@ -121,13 +122,14 @@ public class SteamEngineBlock extends EngineBlock {
SteamEngineTileEntity steamEngine = (SteamEngineTileEntity) te;
IFluidHandler cap = steamEngine.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).resolve().get();
cap.fill(new FluidStack(FluidRegistry.steam.get(), 1000), IFluidHandler.FluidAction.EXECUTE);
player.setItemInHand(hand, new ItemStack(ItemRegistry.pressurizedGasContainer.get()));
player.getItemInHand(hand).shrink(1);
ItemStack ret=new ItemStack(ItemRegistry.pressurizedGasContainer.get());
if(!player.addItem(ret))
world.addFreshEntity(new ItemEntity(world, pos.getX(),pos.getY(),pos.getZ(),ret));
return ActionResultType.SUCCESS;
} else {
return ActionResultType.PASS;
}
} else {
return super.use(state, world, pos, player, hand, blockRayTraceResult);
return ActionResultType.PASS;
}
return super.use(state, world, pos, player, hand, blockRayTraceResult);
}
}

View file

@ -0,0 +1,8 @@
{
"textures": [
"steampowered:steam_0",
"steampowered:steam_1",
"steampowered:steam_2",
"steampowered:steam_3"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B