Campfire movement behaviour

- Campfire now spawns smoke when moved
This commit is contained in:
LordGrimmauld 2020-08-09 13:32:08 +02:00
parent 111e69d189
commit 2675d6ae2f
2 changed files with 50 additions and 5 deletions

View file

@ -1,22 +1,29 @@
package com.simibubi.create;
import java.util.HashMap;
import javax.annotation.Nullable;
import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour;
import com.simibubi.create.content.contraptions.components.actors.CampfireMovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.tterrag.registrate.util.nullness.NonNullConsumer;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable;
import java.util.HashMap;
public class AllMovementBehaviours {
private static final HashMap<ResourceLocation, MovementBehaviour> movementBehaviours = new HashMap<>();
public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) {
private static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) {
movementBehaviours.put(resourceLocation, movementBehaviour);
}
public static void addMovementBehaviour(Block block, MovementBehaviour movementBehaviour) {
addMovementBehaviour(block.getRegistryName(), movementBehaviour);
}
@Nullable
public static MovementBehaviour getMovementBehaviour(ResourceLocation resourceLocation) {
return movementBehaviours.getOrDefault(resourceLocation, null);
@ -37,6 +44,7 @@ public class AllMovementBehaviours {
}
static void register() {
addMovementBehaviour(Blocks.BELL.getRegistryName(), new BellMovementBehaviour());
addMovementBehaviour(Blocks.BELL, new BellMovementBehaviour());
addMovementBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour());
}
}

View file

@ -0,0 +1,37 @@
package com.simibubi.create.content.contraptions.components.actors;
import java.util.Random;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
import net.minecraft.block.CampfireBlock;
import net.minecraft.particles.ParticleTypes;
public class CampfireMovementBehaviour extends MovementBehaviour {
@Override
public boolean hasSpecialMovementRenderer() {
return false;
}
@Override
public void tick(MovementContext context) {
if (context.world == null || !context.world.isRemote || context.position == null
|| !context.state.get(CampfireBlock.LIT))
return;
// Mostly copied from CampfireBlock and CampfireTileEntity
Random random = context.world.rand;
if (random.nextFloat() < 0.11F) {
for (int i = 0; i < random.nextInt(2) + 2; ++i) {
context.world.addOptionalParticle(
context.state.get(CampfireBlock.SIGNAL_FIRE) ? ParticleTypes.CAMPFIRE_SIGNAL_SMOKE
: ParticleTypes.CAMPFIRE_COSY_SMOKE,
true, context.position.getX() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D),
context.position.getY() + random.nextDouble() + random.nextDouble(),
context.position.getZ() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), 0.0D, 0.07D,
0.0D);
}
}
}
}