steam particles for engine and boilers and fix #12
This commit is contained in:
parent
19c47c2b37
commit
1e88851c6b
15 changed files with 316 additions and 116 deletions
|
@ -18,15 +18,21 @@
|
||||||
|
|
||||||
package com.teammoeg.steampowered;
|
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.block.BlockStressValues;
|
||||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||||
import com.simibubi.create.repack.registrate.util.NonNullLazyValue;
|
import com.simibubi.create.repack.registrate.util.NonNullLazyValue;
|
||||||
|
import com.teammoeg.steampowered.client.Particles;
|
||||||
import com.teammoeg.steampowered.client.SteamPoweredClient;
|
import com.teammoeg.steampowered.client.SteamPoweredClient;
|
||||||
import com.teammoeg.steampowered.network.PacketHandler;
|
import com.teammoeg.steampowered.network.PacketHandler;
|
||||||
import com.teammoeg.steampowered.registrate.SPBlocks;
|
import com.teammoeg.steampowered.registrate.SPBlocks;
|
||||||
import com.teammoeg.steampowered.registrate.SPItems;
|
import com.teammoeg.steampowered.registrate.SPItems;
|
||||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||||
|
|
||||||
import net.minecraft.item.ItemGroup;
|
import net.minecraft.item.ItemGroup;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
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.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
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
|
// The value here should match an entry in the META-INF/mods.toml file
|
||||||
@Mod("steampowered")
|
@Mod("steampowered")
|
||||||
|
@ -78,7 +80,7 @@ public class SteamPowered {
|
||||||
FluidRegistry.FLUIDS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
FluidRegistry.FLUIDS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||||
BlockRegistry.BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
BlockRegistry.BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||||
ItemRegistry.ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
ItemRegistry.ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||||
|
Particles.REGISTER.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||||
SPBlocks.register();
|
SPBlocks.register();
|
||||||
SPTiles.register();
|
SPTiles.register();
|
||||||
SPItems.register();
|
SPItems.register();
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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));
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,13 +22,10 @@ import com.teammoeg.steampowered.FluidRegistry;
|
||||||
import com.teammoeg.steampowered.block.SPBlockPartials;
|
import com.teammoeg.steampowered.block.SPBlockPartials;
|
||||||
import com.teammoeg.steampowered.ponder.SPPonderIndex;
|
import com.teammoeg.steampowered.ponder.SPPonderIndex;
|
||||||
import com.teammoeg.steampowered.registrate.SPBlocks;
|
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.RenderType;
|
||||||
import net.minecraft.client.renderer.RenderTypeLookup;
|
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
|
||||||
import net.minecraft.util.text.TranslationTextComponent;
|
|
||||||
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
|
|
||||||
|
@ -37,12 +34,15 @@ public class SteamPoweredClient {
|
||||||
SPBlockPartials.clientInit();
|
SPBlockPartials.clientInit();
|
||||||
modEventBus.addListener(SteamPoweredClient::clientInit);
|
modEventBus.addListener(SteamPoweredClient::clientInit);
|
||||||
modEventBus.addListener(SteamPoweredClient::setupRenderType);
|
modEventBus.addListener(SteamPoweredClient::setupRenderType);
|
||||||
|
modEventBus.addListener(SteamPoweredClient::registerParticleFactories);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clientInit(FMLClientSetupEvent event) {
|
public static void clientInit(FMLClientSetupEvent event) {
|
||||||
SPPonderIndex.register();
|
SPPonderIndex.register();
|
||||||
}
|
}
|
||||||
|
public static void registerParticleFactories(ParticleFactoryRegisterEvent event) {
|
||||||
|
Minecraft.getInstance().particleEngine.register(Particles.STEAM.get(), SteamParticle.Factory::new);
|
||||||
|
}
|
||||||
public static void setupRenderType(FMLClientSetupEvent event) {
|
public static void setupRenderType(FMLClientSetupEvent event) {
|
||||||
event.enqueueWork(() -> {
|
event.enqueueWork(() -> {
|
||||||
RenderTypeLookup.setRenderLayer(FluidRegistry.steam.get(), RenderType.translucent());
|
RenderTypeLookup.setRenderLayer(FluidRegistry.steam.get(), RenderType.translucent());
|
||||||
|
|
|
@ -19,11 +19,13 @@
|
||||||
package com.teammoeg.steampowered.content.boiler;
|
package com.teammoeg.steampowered.content.boiler;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.item.ItemDescription.Palette;
|
import com.simibubi.create.foundation.item.ItemDescription.Palette;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||||
import com.teammoeg.steampowered.client.ClientUtils;
|
import com.teammoeg.steampowered.client.ClientUtils;
|
||||||
|
import com.teammoeg.steampowered.client.Particles;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -37,6 +39,9 @@ import net.minecraft.fluid.FluidState;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.DamageSource;
|
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.math.BlockPos;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
@ -47,86 +52,106 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
|
import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction;
|
||||||
|
|
||||||
public abstract class BoilerBlock extends Block implements ILiquidContainer{
|
public abstract class BoilerBlock extends Block implements ILiquidContainer {
|
||||||
@Override
|
@Override
|
||||||
public boolean canPlaceLiquid(IBlockReader w, BlockPos p, BlockState s,Fluid f) {
|
public boolean canPlaceLiquid(IBlockReader w, BlockPos p, BlockState s, Fluid f) {
|
||||||
TileEntity te=w.getBlockEntity(p);
|
TileEntity te = w.getBlockEntity(p);
|
||||||
if(te instanceof BoilerTileEntity) {
|
if (te instanceof BoilerTileEntity) {
|
||||||
BoilerTileEntity boiler=(BoilerTileEntity)te;
|
BoilerTileEntity boiler = (BoilerTileEntity) te;
|
||||||
if(boiler.input.fill(new FluidStack(f,1000),FluidAction.SIMULATE)==1000)
|
if (boiler.input.fill(new FluidStack(f, 1000), FluidAction.SIMULATE) == 1000)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeLiquid(IWorld w, BlockPos p, BlockState s,
|
public boolean placeLiquid(IWorld w, BlockPos p, BlockState s, FluidState f) {
|
||||||
FluidState f){
|
TileEntity te = w.getBlockEntity(p);
|
||||||
TileEntity te=w.getBlockEntity(p);
|
if (te instanceof BoilerTileEntity) {
|
||||||
if(te instanceof BoilerTileEntity) {
|
BoilerTileEntity boiler = (BoilerTileEntity) te;
|
||||||
BoilerTileEntity boiler=(BoilerTileEntity)te;
|
if (boiler.input.fill(new FluidStack(f.getType(), 1000), FluidAction.SIMULATE) == 1000) {
|
||||||
if(boiler.input.fill(new FluidStack(f.getType(),1000),FluidAction.SIMULATE)==1000) {
|
boiler.input.fill(new FluidStack(f.getType(), 1000), FluidAction.EXECUTE);
|
||||||
boiler.input.fill(new FluidStack(f.getType(),1000),FluidAction.EXECUTE);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
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
|
@Override
|
||||||
public boolean hasAnalogOutputSignal(BlockState p_149740_1_) {
|
public boolean hasAnalogOutputSignal(BlockState p_149740_1_) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BoilerBlock(Properties properties) {
|
public BoilerBlock(Properties properties) {
|
||||||
super(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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasTileEntity(BlockState state) {
|
public int getAnalogOutputSignal(BlockState b, World w, BlockPos p) {
|
||||||
return true;
|
TileEntity te = w.getBlockEntity(p);
|
||||||
}
|
if (te instanceof BoilerTileEntity) {
|
||||||
public abstract int getHuConsume() ;
|
BoilerTileEntity boiler = (BoilerTileEntity) te;
|
||||||
@Override
|
return boiler.output.getFluidAmount() * 15 / boiler.output.getCapacity();
|
||||||
public void appendHoverText(ItemStack i, IBlockReader w, List<ITextComponent> t,
|
}
|
||||||
ITooltipFlag f) {
|
return super.getAnalogOutputSignal(b, w, p);
|
||||||
if(Screen.hasShiftDown()) {
|
}
|
||||||
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.brief").withStyle(TextFormatting.GOLD));
|
|
||||||
if(ClientUtils.hasGoggles()) {
|
@Override
|
||||||
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.danger").withStyle(TextFormatting.RED));
|
public boolean hasTileEntity(BlockState state) {
|
||||||
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.huconsume",this.getHuConsume()).withStyle(TextFormatting.GOLD));
|
return true;
|
||||||
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));
|
|
||||||
}
|
public abstract int getHuConsume();
|
||||||
}else {
|
|
||||||
t.add(TooltipHelper.holdShift(Palette.Gray,false));
|
@Override
|
||||||
}
|
public void appendHoverText(ItemStack i, IBlockReader w, List<ITextComponent> t, ITooltipFlag f) {
|
||||||
if(Screen.hasControlDown()) {
|
if (Screen.hasShiftDown()) {
|
||||||
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.redstone").withStyle(TextFormatting.RED));
|
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.brief").withStyle(TextFormatting.GOLD));
|
||||||
}else {
|
if (ClientUtils.hasGoggles()) {
|
||||||
t.add(Lang.translate("tooltip.holdForControls", Lang.translate("tooltip.keyCtrl")
|
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.danger").withStyle(TextFormatting.RED));
|
||||||
.withStyle(TextFormatting.GRAY))
|
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.huconsume", this.getHuConsume())
|
||||||
.withStyle(TextFormatting.DARK_GRAY));
|
.withStyle(TextFormatting.GOLD));
|
||||||
}
|
t.add(new TranslationTextComponent("tooltip.steampowered.boiler.waterconsume",
|
||||||
super.appendHoverText(i,w,t,f);
|
((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
|
@Override
|
||||||
public void stepOn(World w, BlockPos bp, Entity e) {
|
public void stepOn(World w, BlockPos bp, Entity e) {
|
||||||
TileEntity te=w.getBlockEntity(bp);
|
TileEntity te = w.getBlockEntity(bp);
|
||||||
if(te instanceof BoilerTileEntity&&e instanceof LivingEntity) {
|
if (te instanceof BoilerTileEntity && e instanceof LivingEntity) {
|
||||||
if(((BoilerTileEntity) te).lastheat>0||(!((BoilerTileEntity) te).output.isEmpty())) {
|
if (((BoilerTileEntity) te).lastheat > 0 || (!((BoilerTileEntity) te).output.isEmpty())) {
|
||||||
e.hurt(DamageSource.HOT_FLOOR,2);
|
e.hurt(DamageSource.HOT_FLOOR, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,19 +43,8 @@ import net.minecraftforge.fluids.capability.templates.FluidTank;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiver, ITickableTileEntity, IHaveGoggleInformation {
|
public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiver, ITickableTileEntity, IHaveGoggleInformation {
|
||||||
FluidTank input = new FluidTank(10000,s->s.getFluid() == Fluids.WATER) {
|
FluidTank input = new FluidTank(10000,s->s.getFluid() == Fluids.WATER);
|
||||||
|
FluidTank output = new FluidTank(10000);
|
||||||
@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());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private IFluidHandler ft = new IFluidHandler() {
|
private IFluidHandler ft = new IFluidHandler() {
|
||||||
@Override
|
@Override
|
||||||
public int getTanks() {
|
public int getTanks() {
|
||||||
|
@ -114,6 +103,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
|
||||||
input.readFromNBT(nbt.getCompound("in"));
|
input.readFromNBT(nbt.getCompound("in"));
|
||||||
output.readFromNBT(nbt.getCompound("out"));
|
output.readFromNBT(nbt.getCompound("out"));
|
||||||
heatreceived = nbt.getInt("hu");
|
heatreceived = nbt.getInt("hu");
|
||||||
|
lastheat=nbt.getInt("lasthu");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Easy, easy
|
// Easy, easy
|
||||||
|
@ -121,6 +111,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
|
||||||
nbt.put("in", input.writeToNBT(new CompoundNBT()));
|
nbt.put("in", input.writeToNBT(new CompoundNBT()));
|
||||||
nbt.put("out", output.writeToNBT(new CompoundNBT()));
|
nbt.put("out", output.writeToNBT(new CompoundNBT()));
|
||||||
nbt.putInt("hu", heatreceived);
|
nbt.putInt("hu", heatreceived);
|
||||||
|
nbt.putInt("lasthu", lastheat);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -159,7 +150,7 @@ public abstract class BoilerTileEntity extends TileEntity implements IHeatReceiv
|
||||||
public void tick() {
|
public void tick() {
|
||||||
lastheat=heatreceived;
|
lastheat=heatreceived;
|
||||||
//debug
|
//debug
|
||||||
if (this.level != null && !this.level.isClientSide) {
|
if (this.level != null && !this.level.isClientSide&&heatreceived!=0) {
|
||||||
int consume = Math.min(getHUPerTick(), heatreceived);
|
int consume = Math.min(getHUPerTick(), heatreceived);
|
||||||
heatreceived = 0;
|
heatreceived = 0;
|
||||||
double waterconsume=(SPConfig.COMMON.steamPerWater.get()*10);
|
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.output.fill(new FluidStack(FluidRegistry.steam.get().getFluid(), consume / 10), FluidAction.EXECUTE);
|
||||||
|
|
||||||
this.level.sendBlockUpdated(this.getBlockPos(),this.getBlockState(),this.getBlockState(), 3);
|
this.level.sendBlockUpdated(this.getBlockPos(),this.getBlockState(),this.getBlockState(), 3);
|
||||||
|
this.setChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
import net.minecraft.state.BooleanProperty;
|
import net.minecraft.state.BooleanProperty;
|
||||||
import net.minecraft.state.DirectionProperty;
|
import net.minecraft.state.DirectionProperty;
|
||||||
import net.minecraft.state.StateContainer;
|
import net.minecraft.state.StateContainer;
|
||||||
|
@ -46,6 +47,8 @@ import net.minecraft.util.ActionResultType;
|
||||||
import net.minecraft.util.DamageSource;
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Hand;
|
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.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
@ -67,6 +70,29 @@ public abstract class BurnerBlock extends Block {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
Direction facing = context.getClickedFace();
|
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);
|
return this.defaultBlockState().setValue(FACING, facing.getAxis().isVertical() ? context.getHorizontalDirection().getOpposite() : facing).setValue(LIT, Boolean.valueOf(false)).setValue(REDSTONE_LOCKED,false);
|
||||||
|
|
|
@ -125,27 +125,6 @@ public abstract class BurnerTileEntity extends TileEntity implements ITickableTi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
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) {
|
if (level != null && !level.isClientSide) {
|
||||||
BlockState state = this.level.getBlockState(this.worldPosition);
|
BlockState state = this.level.getBlockState(this.worldPosition);
|
||||||
int emit = getHuPerTick();
|
int emit = getHuPerTick();
|
||||||
|
@ -186,6 +165,7 @@ public abstract class BurnerTileEntity extends TileEntity implements ITickableTi
|
||||||
@Override
|
@Override
|
||||||
public boolean addToGoggleTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
|
public boolean addToGoggleTooltip(List<ITextComponent> tooltip, boolean isPlayerSneaking) {
|
||||||
tooltip.add(componentSpacing.plainCopy().append(new TranslationTextComponent("tooltip.steampowered.burner.hu", HURemain).withStyle(TextFormatting.GOLD)));
|
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)));
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,14 +24,15 @@ import com.simibubi.create.AllShapes;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineBlock;
|
import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineBlock;
|
||||||
import com.teammoeg.steampowered.FluidRegistry;
|
import com.teammoeg.steampowered.FluidRegistry;
|
||||||
import com.teammoeg.steampowered.ItemRegistry;
|
import com.teammoeg.steampowered.ItemRegistry;
|
||||||
|
import com.teammoeg.steampowered.client.Particles;
|
||||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.particles.ParticleTypes;
|
|
||||||
import net.minecraft.state.BooleanProperty;
|
import net.minecraft.state.BooleanProperty;
|
||||||
import net.minecraft.state.StateContainer;
|
import net.minecraft.state.StateContainer;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
@ -95,9 +96,9 @@ public class SteamEngineBlock extends EngineBlock {
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public void animateTick(BlockState p_180655_1_, World p_180655_2_, BlockPos p_180655_3_, Random p_180655_4_) {
|
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)) {
|
if (p_180655_1_.getValue(LIT)) {
|
||||||
double d0 = (double) p_180655_3_.getX() + 0.5D;
|
double d0 = p_180655_3_.getX() + 0.5D;
|
||||||
double d1 = (double) p_180655_3_.getY();
|
double d1 = p_180655_3_.getY();
|
||||||
double d2 = (double) p_180655_3_.getZ() + 0.5D;
|
double d2 = p_180655_3_.getZ() + 0.5D;
|
||||||
if (p_180655_4_.nextDouble() < 0.1D) {
|
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);
|
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();
|
Direction.Axis direction$axis = direction.getAxis();
|
||||||
double d3 = 0.52D;
|
double d3 = 0.52D;
|
||||||
double d4 = p_180655_4_.nextDouble() * 0.6D - 0.3D;
|
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 d6 = p_180655_4_.nextDouble() * 9.0D / 16.0D;
|
||||||
double d7 = direction$axis == Direction.Axis.Z ? (double) direction.getStepZ() * 0.52D : d4;
|
double d7 = direction$axis == Direction.Axis.Z ? direction.getStepZ() * 0.52D : d4;
|
||||||
p_180655_2_.addParticle(ParticleTypes.LAVA, d0 + d5, d1 + d6, d2 + d7, 0.0D, 0.0D, 0.0D);
|
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;
|
SteamEngineTileEntity steamEngine = (SteamEngineTileEntity) te;
|
||||||
IFluidHandler cap = steamEngine.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).resolve().get();
|
IFluidHandler cap = steamEngine.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).resolve().get();
|
||||||
cap.fill(new FluidStack(FluidRegistry.steam.get(), 1000), IFluidHandler.FluidAction.EXECUTE);
|
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;
|
return ActionResultType.SUCCESS;
|
||||||
} else {
|
|
||||||
return ActionResultType.PASS;
|
|
||||||
}
|
}
|
||||||
} else {
|
return ActionResultType.PASS;
|
||||||
return super.use(state, world, pos, player, hand, blockRayTraceResult);
|
|
||||||
}
|
}
|
||||||
|
return super.use(state, world, pos, player, hand, blockRayTraceResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 |
Loading…
Reference in a new issue