From b54b14782e9bd0fdfe12cacbdc6529072551732c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 21:16:58 +0200 Subject: [PATCH] re-enable custom tick functions for furnaces --- .../blockentities/CustomTickBlockEntity.java | 9 ++++++ .../ru/bclib/blocks/BaseFurnaceBlock.java | 30 +++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ru/bclib/blockentities/CustomTickBlockEntity.java diff --git a/src/main/java/ru/bclib/blockentities/CustomTickBlockEntity.java b/src/main/java/ru/bclib/blockentities/CustomTickBlockEntity.java new file mode 100644 index 00000000..906fbe71 --- /dev/null +++ b/src/main/java/ru/bclib/blockentities/CustomTickBlockEntity.java @@ -0,0 +1,9 @@ +package ru.bclib.blockentities; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; + +public interface CustomTickBlockEntity { + void customTick(Level level, BlockPos pos, BlockState state); +} diff --git a/src/main/java/ru/bclib/blocks/BaseFurnaceBlock.java b/src/main/java/ru/bclib/blocks/BaseFurnaceBlock.java index 925a3e45..02f51af9 100644 --- a/src/main/java/ru/bclib/blocks/BaseFurnaceBlock.java +++ b/src/main/java/ru/bclib/blocks/BaseFurnaceBlock.java @@ -1,7 +1,17 @@ package ru.bclib.blocks; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import org.jetbrains.annotations.Nullable; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -13,18 +23,16 @@ import net.minecraft.stats.Stats; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FurnaceBlock; -import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import org.jetbrains.annotations.Nullable; import ru.bclib.blockentities.BaseFurnaceBlockEntity; +import ru.bclib.blockentities.CustomTickBlockEntity; import ru.bclib.client.models.BasePatterns; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; @@ -33,10 +41,6 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; import ru.bclib.registry.BaseBlockEntities; -import java.util.List; -import java.util.Map; -import java.util.Optional; - public class BaseFurnaceBlock extends FurnaceBlock implements BlockModelProvider, IRenderTyped { public BaseFurnaceBlock(Block source) { super(FabricBlockSettings.copyOf(source).luminance(state -> state.getValue(LIT) ? 13 : 0)); @@ -111,6 +115,14 @@ public class BaseFurnaceBlock extends FurnaceBlock implements BlockModelProvider return drop; } + public static void serverTick(Level level, BlockPos pos, BlockState state, T blockEntity) { + if (blockEntity instanceof CustomTickBlockEntity){ + ((CustomTickBlockEntity)blockEntity).customTick(level, pos, state); + } else { + AbstractFurnaceBlockEntity.serverTick(level, pos, state, (AbstractFurnaceBlockEntity) blockEntity); + } + } + @Override @Nullable public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { @@ -119,6 +131,6 @@ public class BaseFurnaceBlock extends FurnaceBlock implements BlockModelProvider @Nullable protected static BlockEntityTicker createFurnaceTicker(Level level, BlockEntityType blockEntityType, BlockEntityType blockEntityType2) { - return level.isClientSide ? null : createTickerHelper(blockEntityType, blockEntityType2, AbstractFurnaceBlockEntity::serverTick); + return level.isClientSide ? null : createTickerHelper(blockEntityType, blockEntityType2, BaseFurnaceBlock::serverTick); } }