Skip to content

Commit

Permalink
fix upgrading of emc links
Browse files Browse the repository at this point in the history
  • Loading branch information
DonovanDMC committed Nov 20, 2022
1 parent 7a57c22 commit 9d9dd58
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 36 deletions.
Expand Up @@ -46,16 +46,16 @@

@SuppressWarnings("unused")
public class BlockEntityEMCLink extends BlockEntityNBTFilterable implements IEmcStorage, IItemHandler, IHasMatter, IFluidHandler {
public BigInteger emc = BigInteger.ZERO;
private final LazyOptional<IEmcStorage> emcStorageCapability = LazyOptional.of(() -> this);
private final LazyOptional<IItemHandler> itemHandlerCapability = LazyOptional.of(() -> this);
private final LazyOptional<IFluidHandler> fluidHandlerCapability = LazyOptional.of(() -> this);
private ItemStack itemStack;
private Matter matter;
private BigInteger remainingEMC = BigInteger.ZERO;
private int remainingImport = 0;
private int remainingExport = 0;
private int remainingFluid = 0;
public BigInteger emc = BigInteger.ZERO;
public ItemStack itemStack;
public Matter matter;
public BigInteger remainingEMC = BigInteger.ZERO;
public int remainingImport = 0;
public int remainingExport = 0;
public int remainingFluid = 0;

public BlockEntityEMCLink(BlockPos pos, BlockState state) {
super(BlockEntityTypes.EMC_LINK.get(), pos, state);
Expand Down
Expand Up @@ -3,9 +3,14 @@
import cool.furry.mc.forge.projectexpansion.Main;
import cool.furry.mc.forge.projectexpansion.block.entity.BlockEntityCollector;
import cool.furry.mc.forge.projectexpansion.block.entity.BlockEntityEMCLink;
import cool.furry.mc.forge.projectexpansion.block.entity.BlockEntityNBTFilterable;
import cool.furry.mc.forge.projectexpansion.block.entity.BlockEntityPowerFlower;
import cool.furry.mc.forge.projectexpansion.block.entity.BlockEntityRelay;
import cool.furry.mc.forge.projectexpansion.util.*;
import cool.furry.mc.forge.projectexpansion.util.ColorStyle;
import cool.furry.mc.forge.projectexpansion.util.EMCFormat;
import cool.furry.mc.forge.projectexpansion.util.IHasMatter;
import cool.furry.mc.forge.projectexpansion.util.Matter;
import cool.furry.mc.forge.projectexpansion.util.Util;
import moze_intel.projecte.api.ProjectEAPI;
import moze_intel.projecte.api.capabilities.IKnowledgeProvider;
import moze_intel.projecte.api.proxy.IEMCProxy;
Expand All @@ -30,7 +35,6 @@
import java.math.BigInteger;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

public class ItemMatterUpgrader extends Item {
public ItemMatterUpgrader() {
Expand All @@ -54,7 +58,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) {

if (level.isClientSide || player == null) return InteractionResult.PASS;

BlockEntity tile = level.getBlockEntity(pos);
BlockEntity blockEntity = level.getBlockEntity(pos);
Block block = level.getBlockState(pos).getBlock();

Matter matter;
Expand All @@ -79,36 +83,56 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) {

@Nullable BlockItem upgrade = null;
@Nullable Block upgradeBlock = null;
@Nullable UUID owner = null;
@Nullable String ownerName = null;
@Nullable BigInteger emc = null;
@Nullable BlockEntity newBlockEntity = null;
@Nullable BlockState newBlockState = null;

if (tile instanceof BlockEntityCollector) {
if (blockEntity instanceof BlockEntityCollector) {
upgrade = Objects.requireNonNull(upgradeTo.getCollectorItem());
upgradeBlock = Objects.requireNonNull(upgradeTo.getCollector());
}

if (tile instanceof BlockEntityPowerFlower blockEntityPowerFlower) {
if (blockEntity instanceof BlockEntityPowerFlower be) {
upgrade = Objects.requireNonNull(upgradeTo.getPowerFlowerItem());
upgradeBlock = Objects.requireNonNull(upgradeTo.getPowerFlower());
owner = blockEntityPowerFlower.owner;
ownerName = blockEntityPowerFlower.ownerName;
emc = blockEntityPowerFlower.emc;
if (owner == null) return InteractionResult.FAIL;
if (owner != player.getUUID()) {
if (be.owner == null) return InteractionResult.FAIL;
if (be.owner != player.getUUID()) {
player.displayClientMessage(Component.translatable("item.projectexpansion.matter_upgrader.not_owner").setStyle(ColorStyle.RED), true);
return InteractionResult.FAIL;
}
}

if (tile instanceof BlockEntityRelay) {
upgrade = Objects.requireNonNull(upgradeTo.getRelayItem());
upgradeBlock = Objects.requireNonNull(upgradeTo.getRelay());
BlockEntityPowerFlower intBlockEntity = new BlockEntityPowerFlower(pos, newBlockState = upgradeBlock.defaultBlockState());
intBlockEntity.owner = be.owner;
intBlockEntity.ownerName = be.ownerName;
intBlockEntity.emc = be.emc;
intBlockEntity.saveAdditional(new CompoundTag());
newBlockEntity = intBlockEntity;
}

if (tile instanceof BlockEntityEMCLink) {
if (blockEntity instanceof BlockEntityEMCLink be) {
upgrade = Objects.requireNonNull(upgradeTo.getEMCLinkItem());
upgradeBlock = Objects.requireNonNull(upgradeTo.getEMCLink());
if (be.owner == null) return InteractionResult.FAIL;
if (be.owner != player.getUUID()) {
player.displayClientMessage(Component.translatable("item.projectexpansion.matter_upgrader.not_owner").setStyle(ColorStyle.RED), true);
return InteractionResult.FAIL;
}

BlockEntityEMCLink intBlockEntity = new BlockEntityEMCLink(pos, newBlockState = upgradeBlock.defaultBlockState().setValue(BlockEntityNBTFilterable.FILTER, be.getBlockState().getValue(BlockEntityNBTFilterable.FILTER)));
intBlockEntity.owner = be.owner;
intBlockEntity.ownerName = be.ownerName;
intBlockEntity.emc = be.emc;
intBlockEntity.itemStack = be.itemStack;
intBlockEntity.remainingEMC = be.remainingEMC;
intBlockEntity.remainingImport = be.remainingImport;
intBlockEntity.remainingExport = be.remainingExport;
intBlockEntity.remainingFluid = be.remainingFluid;
intBlockEntity.saveAdditional(new CompoundTag());
newBlockEntity = intBlockEntity;
}

if (blockEntity instanceof BlockEntityRelay) {
upgrade = Objects.requireNonNull(upgradeTo.getRelayItem());
upgradeBlock = Objects.requireNonNull(upgradeTo.getRelay());
}

if (!provider.hasKnowledge(new ItemStack(upgrade)) && !player.isCreative()) {
Expand All @@ -126,20 +150,16 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) {
return InteractionResult.FAIL;
}

level.removeBlock(pos, false);
BlockState state = upgradeBlock.defaultBlockState();
level.setBlockAndUpdate(pos, state);
if(newBlockState == null) {
newBlockState = upgradeBlock.defaultBlockState();
}

if (tile instanceof BlockEntityPowerFlower) {
if (ownerName == null || emc == null) return InteractionResult.FAIL;
level.removeBlock(pos, false);
level.setBlockAndUpdate(pos, newBlockState);

BlockEntityPowerFlower newTile = new BlockEntityPowerFlower(pos, state);
newTile.owner = owner;
newTile.ownerName = ownerName;
newTile.emc = emc;
newTile.saveAdditional(new CompoundTag());
if(newBlockEntity != null) {
level.removeBlockEntity(pos);
level.setBlockEntity(newTile);
level.setBlockEntity(newBlockEntity);
Util.markDirty(level, pos);
}

Expand Down

0 comments on commit 9d9dd58

Please sign in to comment.