下面列出了怎么用net.minecraft.util.ITickable的API类实例代码及写法,或者点击链接到github查看源代码。
public final boolean placeCoverOnSide(EnumFacing side, ItemStack itemStack, CoverDefinition coverDefinition) {
Preconditions.checkNotNull(side, "side");
Preconditions.checkNotNull(coverDefinition, "coverDefinition");
CoverBehavior coverBehavior = coverDefinition.createCoverBehavior(this, side);
if (!canPlaceCoverOnSide(side) || !coverBehavior.canAttach()) {
return false;
}
//if cover requires ticking and we're not tickable, update ourselves and redirect call to new tickable tile entity
boolean requiresTicking = coverBehavior instanceof ITickable;
if (requiresTicking && !holder.supportsTicking()) {
IPipeTile<?, ?> newHolderTile = holder.setSupportsTicking();
return newHolderTile.getCoverableImplementation().placeCoverOnSide(side, itemStack, coverDefinition);
}
if (coverBehaviors[side.getIndex()] != null) {
removeCover(side);
}
this.coverBehaviors[side.getIndex()] = coverBehavior;
coverBehavior.onAttached(itemStack);
writeCustomData(1, buffer -> {
buffer.writeByte(side.getIndex());
buffer.writeVarInt(CoverDefinition.getNetworkIdForCover(coverDefinition));
coverBehavior.writeInitialSyncData(buffer);
});
if (!coverBehavior.canPipePassThrough()) {
holder.setConnectionBlocked(AttachmentType.COVER, side, true);
}
holder.notifyBlockUpdate();
holder.markAsDirty();
return true;
}
public void update() {
if (!getWorld().isRemote) {
for (CoverBehavior coverBehavior : coverBehaviors) {
if (coverBehavior instanceof ITickable) {
((ITickable) coverBehavior).update();
}
}
}
}
/**
* @reason Adds subsections to the "root.tick.level.entities.blockEntities"
* profiler, using the entity ID, or the class name if the ID is null.
*/
@Redirect(method = "updateEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ITickable;update()V"))
private void tileEntityUpdate(ITickable tileEntity) {
profiler.func_194340_a(() -> { // func_194340_a = startSection(Supplier<String>)
final ResourceLocation tileEntityID = TileEntity.getKey(((TileEntity) tileEntity).getClass());
return tileEntityID == null ? tileEntity.getClass().getSimpleName() : tileEntityID.toString();
});
tileEntity.update();
profiler.endSection();
}
public void update() {
if (getWorld().getTotalWorldTime() % getUpdateRate() == 0L) {
tickingPipeNets.forEach(ITickable::update);
}
}