mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-23 21:38:00 +01:00
Clean up and adjust transitions when zap apple trees change stages
This commit is contained in:
parent
fbe859dcc7
commit
2e938633e9
5 changed files with 35 additions and 39 deletions
|
@ -30,16 +30,10 @@ public class BaseZapAppleLeavesBlock extends LeavesBlock implements TintedBlock,
|
|||
|
||||
@Override
|
||||
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) {
|
||||
if (state.get(PERSISTENT)
|
||||
|| oldState.isOf(state.getBlock())
|
||||
|| oldState.isOf(UBlocks.ZAP_LEAVES)
|
||||
|| oldState.isOf(UBlocks.FLOWERING_ZAP_LEAVES)
|
||||
|| oldState.isOf(UBlocks.ZAP_LEAVES_PLACEHOLDER)
|
||||
|| !(world instanceof ServerWorld sw)) {
|
||||
if (state.get(PERSISTENT) || oldState.isOf(state.getBlock())) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateStage(state, sw, pos);
|
||||
updateStage(state, world, pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -22,9 +22,7 @@ public class ZapAppleLeavesPlaceholderBlock extends AirBlock implements ZapStage
|
|||
|
||||
@Override
|
||||
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) {
|
||||
if (world instanceof ServerWorld sw) {
|
||||
updateStage(state, sw, pos);
|
||||
}
|
||||
updateStage(state, world, pos);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
|
|
@ -8,14 +8,18 @@ import net.minecraft.block.Blocks;
|
|||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public interface ZapStagedBlock {
|
||||
ZapAppleStageStore.Stage getStage(BlockState state);
|
||||
|
||||
default void updateStage(BlockState state, ServerWorld world, BlockPos pos) {
|
||||
ZapAppleStageStore.Stage currentStage = ZapAppleStageStore.get(world).getStage();
|
||||
default void updateStage(BlockState state, World world, BlockPos pos) {
|
||||
if (!(world instanceof ServerWorld sw)) {
|
||||
return;
|
||||
}
|
||||
ZapAppleStageStore.Stage currentStage = ZapAppleStageStore.get(sw).getStage();
|
||||
if (currentStage != getStage(state)) {
|
||||
state = currentStage.getNewState(state);
|
||||
state = getState(currentStage);
|
||||
world.setBlockState(pos, state);
|
||||
}
|
||||
world.scheduleBlockTick(pos, state.getBlock(), 1);
|
||||
|
@ -23,15 +27,35 @@ public interface ZapStagedBlock {
|
|||
|
||||
default void tryAdvanceStage(BlockState state, ServerWorld world, BlockPos pos, Random random) {
|
||||
ZapAppleStageStore store = ZapAppleStageStore.get(world);
|
||||
ZapAppleStageStore.Stage newStage = store.getStage();
|
||||
if (!world.isDay() && getStage(state).mustChangeIntoInstantly(newStage)) {
|
||||
state = newStage.getNewState(state);
|
||||
world.setBlockState(pos, state);
|
||||
onStageChanged(store, newStage, world, state, pos, random);
|
||||
ZapAppleStageStore.Stage currentStage = store.getStage();
|
||||
if (!world.isDay() && currentStage != getStage(state)) {
|
||||
int transitionRate = getTransitionRate(currentStage);
|
||||
if (transitionRate == 0 || random.nextInt(transitionRate) == 0) {
|
||||
state = getState(currentStage);
|
||||
world.setBlockState(pos, state);
|
||||
onStageChanged(store, currentStage, world, state, pos, random);
|
||||
}
|
||||
}
|
||||
world.scheduleBlockTick(pos, state.getBlock(), 1);
|
||||
}
|
||||
|
||||
default int getTransitionRate(ZapAppleStageStore.Stage stage) {
|
||||
if (stage == ZapAppleStageStore.Stage.HIBERNATING || stage == ZapAppleStageStore.Stage.GREENING) {
|
||||
return 10;
|
||||
}
|
||||
return 2500;
|
||||
}
|
||||
|
||||
default BlockState getState(ZapAppleStageStore.Stage stage) {
|
||||
if (stage == ZapAppleStageStore.Stage.HIBERNATING) {
|
||||
return UBlocks.ZAP_LEAVES_PLACEHOLDER.getDefaultState();
|
||||
}
|
||||
if (stage == ZapAppleStageStore.Stage.FLOWERING) {
|
||||
return UBlocks.FLOWERING_ZAP_LEAVES.getDefaultState();
|
||||
}
|
||||
return UBlocks.ZAP_LEAVES.getDefaultState().with(ZapAppleLeavesBlock.STAGE, stage);
|
||||
}
|
||||
|
||||
private static void onStageChanged(ZapAppleStageStore store, ZapAppleStageStore.Stage stage, ServerWorld world, BlockState state, BlockPos pos, Random random) {
|
||||
boolean mustFruit = Random.create(state.getRenderingSeed(pos)).nextInt(5) < 2;
|
||||
BlockState below = world.getBlockState(pos.down());
|
||||
|
|
|
@ -30,8 +30,6 @@ public class DynamicContent implements Content {
|
|||
private final Panel leftPanel = new Panel(this);
|
||||
private final Panel rightPanel = new Panel(this);
|
||||
|
||||
private int headerColor;
|
||||
|
||||
public DynamicContent(PacketByteBuf buffer) {
|
||||
pages = buffer.readList(Page::new);
|
||||
}
|
||||
|
|
|
@ -5,13 +5,10 @@ import java.util.stream.StreamSupport;
|
|||
|
||||
import com.minelittlepony.unicopia.USounds;
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.block.UBlocks;
|
||||
import com.minelittlepony.unicopia.block.ZapAppleLeavesBlock;
|
||||
import com.minelittlepony.unicopia.particle.LightningBoltParticleEffect;
|
||||
import com.minelittlepony.unicopia.particle.ParticleUtils;
|
||||
import com.minelittlepony.unicopia.util.Tickable;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LightningEntity;
|
||||
import net.minecraft.nbt.*;
|
||||
|
@ -156,24 +153,9 @@ public class ZapAppleStageStore extends PersistentState implements Tickable {
|
|||
return VALUES[MathHelper.clamp(id, 0, VALUES.length)];
|
||||
}
|
||||
|
||||
public boolean mustChangeIntoInstantly(Stage to) {
|
||||
return this != to;// && (this == HIBERNATING || to == HIBERNATING);
|
||||
}
|
||||
|
||||
public BlockState getNewState(BlockState currentState) {
|
||||
if (this == ZapAppleStageStore.Stage.HIBERNATING) {
|
||||
return UBlocks.ZAP_LEAVES_PLACEHOLDER.getDefaultState();
|
||||
}
|
||||
if (this == ZapAppleStageStore.Stage.FLOWERING) {
|
||||
return UBlocks.FLOWERING_ZAP_LEAVES.getDefaultState();
|
||||
}
|
||||
return UBlocks.ZAP_LEAVES.getDefaultState().with(ZapAppleLeavesBlock.STAGE, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String asString() {
|
||||
return name().toLowerCase(Locale.ROOT);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue