Separate pedestals entities

This commit is contained in:
Aleksey 2020-11-04 22:14:54 +03:00
parent c3a7a59d78
commit 0dc7732092
9 changed files with 230 additions and 64 deletions

View file

@ -23,11 +23,12 @@ import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.explosion.Explosion;
import ru.betterend.blocks.basis.BlockPedestal;
import ru.betterend.blocks.entities.PedestalBlockEntity;
import ru.betterend.blocks.entities.EternalPedestalEntity;
import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems;
import ru.betterend.util.EternalRitual;
import ru.betterend.rituals.EternalRitual;
public class EternalPedestal extends BlockPedestal {
public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVATED;
@ -42,8 +43,8 @@ public class EternalPedestal extends BlockPedestal {
ActionResult result = super.onUse(state, world, pos, player, hand, hit);
if (result.equals(ActionResult.SUCCESS)) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof PedestalBlockEntity) {
PedestalBlockEntity pedestal = (PedestalBlockEntity) blockEntity;
if (blockEntity instanceof EternalPedestalEntity) {
EternalPedestalEntity pedestal = (EternalPedestalEntity) blockEntity;
BlockState updatedState = world.getBlockState(pos);
if (pedestal.isEmpty() && updatedState.get(ACTIVATED)) {
if (pedestal.hasRitual()) {
@ -103,8 +104,8 @@ public class EternalPedestal extends BlockPedestal {
}
List<ItemStack> drop = Lists.newArrayList();
BlockEntity blockEntity = builder.getNullable(LootContextParameters.BLOCK_ENTITY);
if (blockEntity != null && blockEntity instanceof PedestalBlockEntity) {
PedestalBlockEntity pedestal = (PedestalBlockEntity) blockEntity;
if (blockEntity != null && blockEntity instanceof EternalPedestalEntity) {
EternalPedestalEntity pedestal = (EternalPedestalEntity) blockEntity;
if (!pedestal.isEmpty()) {
drop.add(pedestal.getStack(0));
}
@ -117,4 +118,9 @@ public class EternalPedestal extends BlockPedestal {
super.appendProperties(stateManager);
stateManager.add(ACTIVATED);
}
@Override
public BlockEntity createBlockEntity(BlockView world) {
return new EternalPedestalEntity();
}
}

View file

@ -0,0 +1,12 @@
package ru.betterend.blocks;
import net.minecraft.block.Block;
import ru.betterend.blocks.basis.BlockPedestal;
public class InfusionPedestal extends BlockPedestal {
public InfusionPedestal(Block parent) {
super(parent);
}
}

View file

@ -0,0 +1,49 @@
package ru.betterend.blocks.entities;
import net.minecraft.block.BlockState;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import ru.betterend.rituals.EternalRitual;
public class EternalPedestalEntity extends PedestalBlockEntity {
private EternalRitual linkedRitual;
public boolean hasRitual() {
return this.linkedRitual != null;
}
public void linkRitual(EternalRitual ritual) {
this.linkedRitual = ritual;
}
public EternalRitual getRitual() {
return this.linkedRitual;
}
@Override
public void setLocation(World world, BlockPos pos) {
super.setLocation(world, pos);
if (hasRitual()) {
this.linkedRitual.setWorld(world);
}
}
@Override
public void fromTag(BlockState state, CompoundTag tag) {
super.fromTag(state, tag);
if (tag.contains("ritual")) {
this.linkedRitual = new EternalRitual(world);
this.linkedRitual.fromTag(tag.getCompound("ritual"));
}
}
@Override
public CompoundTag toTag(CompoundTag tag) {
if (this.hasRitual()) {
tag.put("ritual", linkedRitual.toTag(new CompoundTag()));
}
return super.toTag(tag);
}
}

View file

@ -0,0 +1,13 @@
package ru.betterend.blocks.entities;
import ru.betterend.rituals.InfusionRitual;
public class InfusionPedestalEntity extends PedestalBlockEntity {
private InfusionRitual activeRitual;
public boolean hasRitual() {
return this.activeRitual != null;
}
}

View file

@ -8,15 +8,12 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket;
import net.minecraft.util.Tickable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import ru.betterend.registry.EndBlockEntities;
import ru.betterend.util.EternalRitual;
public class PedestalBlockEntity extends BlockEntity implements Inventory, Tickable {
private ItemStack activeItem = ItemStack.EMPTY;
private EternalRitual linkedRitual;
private final int maxAge = 314;
private int age;
@ -24,18 +21,6 @@ public class PedestalBlockEntity extends BlockEntity implements Inventory, Ticka
super(EndBlockEntities.PEDESTAL);
}
public boolean hasRitual() {
return this.linkedRitual != null;
}
public void linkRitual(EternalRitual ritual) {
this.linkedRitual = ritual;
}
public EternalRitual getRitual() {
return this.linkedRitual;
}
public int getAge() {
return this.age;
}
@ -94,14 +79,6 @@ public class PedestalBlockEntity extends BlockEntity implements Inventory, Ticka
return this.toTag(new CompoundTag());
}
@Override
public void setLocation(World world, BlockPos pos) {
super.setLocation(world, pos);
if (hasRitual()) {
this.linkedRitual.setWorld(world);
}
}
@Override
public void fromTag(BlockState state, CompoundTag tag) {
super.fromTag(state, tag);
@ -109,18 +86,11 @@ public class PedestalBlockEntity extends BlockEntity implements Inventory, Ticka
CompoundTag itemTag = tag.getCompound("active_item");
this.activeItem = ItemStack.fromTag(itemTag);
}
if (tag.contains("ritual")) {
this.linkedRitual = new EternalRitual(world);
this.linkedRitual.fromTag(tag.getCompound("ritual"));
}
}
@Override
public CompoundTag toTag(CompoundTag tag) {
tag.put("active_item", activeItem.toTag(new CompoundTag()));
if (this.hasRitual()) {
tag.put("ritual", linkedRitual.toTag(new CompoundTag()));
}
return super.toTag(tag);
}