Ding ding
- Haunted and Peculiar bells now accept redstone power - Train Stations now emit a comparator signal whenever a Train is present
This commit is contained in:
parent
6dd3231b6d
commit
15f4e5ba8d
7 changed files with 71 additions and 30 deletions
|
@ -12,6 +12,7 @@ import net.minecraft.world.entity.player.Player;
|
|||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.BellBlock;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
@ -45,6 +46,23 @@ public abstract class AbstractBellBlock<TE extends AbstractBellTileEntity> exten
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Block pBlock, BlockPos pFromPos,
|
||||
boolean pIsMoving) {
|
||||
if (pLevel.isClientSide)
|
||||
return;
|
||||
boolean shouldPower = pLevel.hasNeighborSignal(pPos);
|
||||
if (shouldPower == pState.getValue(POWERED))
|
||||
return;
|
||||
pLevel.setBlock(pPos, pState.setValue(POWERED, shouldPower), 3);
|
||||
if (!shouldPower)
|
||||
return;
|
||||
Direction facing = pState.getValue(FACING);
|
||||
BellAttachType type = pState.getValue(ATTACHMENT);
|
||||
ring(pLevel, pPos,
|
||||
type == BellAttachType.CEILING || type == BellAttachType.FLOOR ? facing : facing.getClockWise(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onHit(Level world, BlockState state, BlockHitResult hit, @Nullable Player player, boolean flag) {
|
||||
BlockPos pos = hit.getBlockPos();
|
||||
|
@ -52,20 +70,20 @@ public abstract class AbstractBellBlock<TE extends AbstractBellTileEntity> exten
|
|||
if (direction == null)
|
||||
direction = world.getBlockState(pos)
|
||||
.getValue(FACING);
|
||||
|
||||
if (!this.canRingFrom(state, direction, hit.getLocation().y - pos.getY()))
|
||||
return false;
|
||||
return ring(world, pos, direction, player);
|
||||
}
|
||||
|
||||
private boolean ring(Level world, BlockPos pos, Direction direction, Player player) {
|
||||
TE te = getTileEntity(world, pos);
|
||||
if (world.isClientSide)
|
||||
return true;
|
||||
if (te == null || !te.ring(world, pos, direction))
|
||||
return false;
|
||||
|
||||
if (!world.isClientSide) {
|
||||
playSound(world, pos);
|
||||
if (player != null)
|
||||
player.awardStat(Stats.BELL_RING);
|
||||
}
|
||||
|
||||
playSound(world, pos);
|
||||
if (player != null)
|
||||
player.awardStat(Stats.BELL_RING);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,9 +5,11 @@ import java.util.List;
|
|||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
@ -33,6 +35,7 @@ public abstract class AbstractBellTileEntity extends SmartTileEntity {
|
|||
isRinging = true;
|
||||
ringingTicks = 0;
|
||||
ringDirection = direction;
|
||||
sendData();
|
||||
return true;
|
||||
};
|
||||
|
||||
|
@ -49,6 +52,24 @@ public abstract class AbstractBellTileEntity extends SmartTileEntity {
|
|||
ringingTicks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag tag, boolean clientPacket) {
|
||||
super.write(tag, clientPacket);
|
||||
if (!clientPacket || ringingTicks != 0 || !isRinging)
|
||||
return;
|
||||
NBTHelper.writeEnum(tag, "Ringing", ringDirection);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag tag, boolean clientPacket) {
|
||||
super.read(tag, clientPacket);
|
||||
if (!clientPacket || !tag.contains("Ringing"))
|
||||
return;
|
||||
ringDirection = NBTHelper.readEnum(tag, "Ringing", Direction.class);
|
||||
ringingTicks = 0;
|
||||
isRinging = true;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public abstract PartialModel getBellModel();
|
||||
|
|
|
@ -18,7 +18,7 @@ public class HauntedBellBlock extends AbstractBellBlock<HauntedBellTileEntity> {
|
|||
public BlockEntityType<? extends HauntedBellTileEntity> getTileEntityType() {
|
||||
return AllTileEntities.HAUNTED_BELL.get();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Class<HauntedBellTileEntity> getTileEntityClass() {
|
||||
return HauntedBellTileEntity.class;
|
||||
|
@ -31,8 +31,11 @@ public class HauntedBellBlock extends AbstractBellBlock<HauntedBellTileEntity> {
|
|||
|
||||
@Override
|
||||
public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
if (oldState.getBlock() != this)
|
||||
withTileEntityDo(world, pos, HauntedBellTileEntity::startEffect);
|
||||
if (oldState.getBlock() != this && !world.isClientSide)
|
||||
withTileEntityDo(world, pos, hbte -> {
|
||||
hbte.effectTicks = HauntedBellTileEntity.EFFECT_TICKS;
|
||||
hbte.sendData();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -39,21 +39,9 @@ public class HauntedBellTileEntity extends AbstractBellTileEntity {
|
|||
public boolean ring(Level world, BlockPos pos, Direction direction) {
|
||||
if (isRinging && ringingTicks < RECHARGE_TICKS)
|
||||
return false;
|
||||
|
||||
if (!super.ring(world, pos, direction))
|
||||
return false;
|
||||
|
||||
if (!world.isClientSide)
|
||||
HauntedBellPulser.sendPulse(world, pos, DISTANCE, false);
|
||||
|
||||
startEffect();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void startEffect() {
|
||||
HauntedBellPulser.sendPulse(world, pos, DISTANCE, false);
|
||||
effectTicks = EFFECT_TICKS;
|
||||
sendData();
|
||||
return super.ring(world, pos, direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -176,9 +176,9 @@ public class GlobalRailwayManager {
|
|||
for (TrackGraph graph : trackNetworks.values())
|
||||
graph.tickPoints(false);
|
||||
|
||||
if (AllKeys.isKeyDown(GLFW.GLFW_KEY_K))
|
||||
trackNetworks.values()
|
||||
.forEach(TrackGraph::debugViewReserved);
|
||||
// if (AllKeys.isKeyDown(GLFW.GLFW_KEY_K))
|
||||
// trackNetworks.values()
|
||||
// .forEach(TrackGraph::debugViewReserved);
|
||||
// if (AllKeys.isKeyDown(GLFW.GLFW_KEY_J) && AllKeys.altDown())
|
||||
// trackNetworks.values()
|
||||
// .forEach(TrackGraph::debugViewNodes);
|
||||
|
|
|
@ -47,6 +47,17 @@ public class StationBlock extends HorizontalDirectionalBlock implements ITE<Stat
|
|||
super.createBlockStateDefinition(pBuilder.add(FACING, ASSEMBLING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAnalogOutputSignal(BlockState pState) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAnalogOutputSignal(BlockState pState, Level pLevel, BlockPos pPos) {
|
||||
return getTileEntityOptional(pLevel, pPos).map(ste -> ste.trainPresent ? 15 : 0)
|
||||
.orElse(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillItemCategory(CreativeModeTab pTab, NonNullList<ItemStack> pItems) {
|
||||
super.fillItemCategory(pTab, pItems);
|
||||
|
@ -62,7 +73,7 @@ public class StationBlock extends HorizontalDirectionalBlock implements ITE<Stat
|
|||
ItemStack itemInHand = pPlayer.getItemInHand(pHand);
|
||||
if (AllItems.WRENCH.isIn(itemInHand))
|
||||
return InteractionResult.PASS;
|
||||
if (itemInHand.getItem() == Items.SPONGE)
|
||||
if (itemInHand.getItem() == Items.SPONGE)
|
||||
Create.RAILWAYS.trains.clear();
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||
() -> () -> withTileEntityDo(pLevel, pPos, te -> this.displayScreen(te, pPlayer)));
|
||||
|
|
|
@ -164,7 +164,7 @@ public class StationTileEntity extends SmartTileEntity {
|
|||
this.trainPresent = trainPresent;
|
||||
this.trainCanDisassemble = canDisassemble;
|
||||
this.trainBackwards = imminentTrain != null && imminentTrain.currentlyBackwards;
|
||||
sendData();
|
||||
notifyUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue