This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
RelicCraft/src/main/java/com/thebrokenrail/reliccraft/block/DragonEggHolderBlockEntity....

129 lines
3.6 KiB
Java
Raw Normal View History

2020-04-04 02:32:34 +00:00
package com.thebrokenrail.reliccraft.block;
import com.thebrokenrail.reliccraft.RelicCraft;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.Inventories;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Tickable;
2020-06-28 16:38:49 +00:00
import net.minecraft.util.collection.DefaultedList;
import java.util.Objects;
2020-04-04 02:32:34 +00:00
public class DragonEggHolderBlockEntity extends BlockEntity implements Inventory, Tickable {
public DragonEggHolderBlockEntity() {
super(RelicCraft.DRAGON_EGG_HOLDER_BLOCK_ENTITY);
}
@Override
2020-06-28 16:38:49 +00:00
public void fromTag(BlockState state, CompoundTag tag) {
super.fromTag(state, tag);
DefaultedList<ItemStack> list = DefaultedList.ofSize(size(), ItemStack.EMPTY);
2020-04-04 02:32:34 +00:00
Inventories.fromTag(tag, list);
stack = list.get(0);
}
@Override
public CompoundTag toTag(CompoundTag tag) {
2020-06-28 16:38:49 +00:00
DefaultedList<ItemStack> list = DefaultedList.ofSize(size(), ItemStack.EMPTY);
2020-04-04 02:32:34 +00:00
list.set(0, stack);
Inventories.toTag(tag, list);
return super.toTag(tag);
}
private ItemStack stack = ItemStack.EMPTY;
@Override
2020-06-28 16:38:49 +00:00
public int size() {
2020-04-04 02:32:34 +00:00
return 1;
}
@Override
2020-06-28 16:38:49 +00:00
public int getMaxCountPerStack() {
2020-04-04 02:32:34 +00:00
return 1;
}
@Override
2020-06-28 16:38:49 +00:00
public boolean isEmpty() {
2020-04-04 02:32:34 +00:00
return stack.isEmpty();
}
@Override
2020-06-28 16:38:49 +00:00
public ItemStack getStack(int slot) {
2020-04-04 02:32:34 +00:00
return stack;
}
@Override
2020-06-28 16:38:49 +00:00
public ItemStack removeStack(int slot, int amount) {
ItemStack newStack = getStack(0).split(amount);
2020-04-04 02:32:34 +00:00
markDirty();
return newStack;
}
@Override
2020-06-28 16:38:49 +00:00
public ItemStack removeStack(int slot) {
ItemStack newStack = getStack(0).copy();
setStack(0, ItemStack.EMPTY);
2020-04-04 02:32:34 +00:00
return newStack;
}
@Override
2020-06-28 16:38:49 +00:00
public void setStack(int slot, ItemStack stack) {
2020-04-04 02:32:34 +00:00
this.stack = stack;
2020-06-28 16:38:49 +00:00
if (stack.getCount() > getMaxCountPerStack()) {
stack.setCount(getMaxCountPerStack());
2020-04-04 02:32:34 +00:00
}
markDirty();
}
@Override
2020-06-28 16:38:49 +00:00
public boolean canPlayerUse(PlayerEntity player) {
2020-04-04 02:32:34 +00:00
return true;
}
@Override
public void clear() {
2020-06-28 16:38:49 +00:00
setStack(0, ItemStack.EMPTY);
2020-04-04 02:32:34 +00:00
}
@Override
public void tick() {
if (hasWorld()) {
assert getWorld() != null;
Block block = getWorld().getBlockState(getPos()).getBlock();
2020-04-19 01:16:30 +00:00
if (block instanceof AbstractDragonEggHolderBlock && !getWorld().isClient()) {
((AbstractDragonEggHolderBlock) block).tick(getWorld(), getPos());
2020-04-04 02:32:34 +00:00
}
}
}
@Override
2020-06-28 16:38:49 +00:00
public boolean isValid(int slot, ItemStack stack) {
2020-04-04 02:32:34 +00:00
return stack.getItem() == Items.DRAGON_EGG;
}
@Override
public void markDirty() {
super.markDirty();
if (hasWorld() && !Objects.requireNonNull(getWorld()).isClient()) {
updateBlockState();
}
}
private void updateBlockState() {
2020-04-04 02:32:34 +00:00
if (hasWorld()) {
assert getWorld() != null;
BlockState state = getWorld().getBlockState(pos);
2020-06-28 16:38:49 +00:00
boolean active = !getStack(0).isEmpty();
2020-04-04 02:32:34 +00:00
if (state.get(TeleportationRestrictorBlock.ACTIVE) != active) {
getWorld().setBlockState(getPos(), state.with(TeleportationRestrictorBlock.ACTIVE, active));
RelicCraft.playInteractTeleportRestrictorSound(getWorld(), getPos());
}
}
}
}