Skip to content

Commit

Permalink
Fix Relay & EMC Link EMC Limits
Browse files Browse the repository at this point in the history
  • Loading branch information
DonovanDMC committed Jan 30, 2023
1 parent 97081ad commit 8331d6b
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public void appendHoverText(ItemStack stack, @Nullable BlockGetter level, List<C
super.appendHoverText(stack, level, list, flag);
list.add(Component.translatable("block.projectexpansion.relay.tooltip").setStyle(ColorStyle.GRAY));
list.add(Component.translatable("block.projectexpansion.relay.bonus", EMCFormat.getComponent(matter.getRelayBonusForTicks(Config.tickDelay.get())).setStyle(ColorStyle.GREEN)).setStyle(ColorStyle.GRAY));
list.add(Component.translatable("block.projectexpansion.relay.transfer", EMCFormat.getComponent(matter.getRelayTransferForTicks(Config.tickDelay.get())).setStyle(ColorStyle.GREEN)).setStyle(ColorStyle.GRAY));
list.add(Component.translatable("block.projectexpansion.relay.transfer", matter.getRelayTransferComponent().setStyle(ColorStyle.GREEN)).setStyle(ColorStyle.GRAY));
list.add(Component.translatable("text.projectexpansion.see_wiki").setStyle(ColorStyle.AQUA));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import cool.furry.mc.forge.projectexpansion.block.BlockCollector;
import cool.furry.mc.forge.projectexpansion.config.Config;
import cool.furry.mc.forge.projectexpansion.registries.BlockEntityTypes;
import cool.furry.mc.forge.projectexpansion.util.IHasMatter;
import cool.furry.mc.forge.projectexpansion.util.Matter;
import cool.furry.mc.forge.projectexpansion.util.TagNames;
import cool.furry.mc.forge.projectexpansion.util.Util;
import moze_intel.projecte.api.capabilities.PECapabilities;
Expand All @@ -25,8 +27,9 @@
import java.util.List;

@SuppressWarnings("unused")
public class BlockEntityCollector extends BlockEntity implements IEmcStorage {
public class BlockEntityCollector extends BlockEntity implements IEmcStorage, IHasMatter {
public BigInteger emc = BigInteger.ZERO;
public Matter matter;
private final LazyOptional<IEmcStorage> emcStorageCapability = LazyOptional.of(() -> this);
public static final Direction[] DIRECTIONS = Direction.values();
public BlockEntityCollector(BlockPos pos, BlockState state) {
Expand Down Expand Up @@ -75,6 +78,22 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityC
emc = Util.spreadEMC(emc, temp);
}


@Nonnull
@Override
public Matter getMatter() {
if (level != null) {
BlockCollector block = (BlockCollector) getBlockState().getBlock();
if (block.getMatter() != matter) setMatter(block.getMatter());
return matter;
}
return Matter.BASIC;
}

private void setMatter(Matter matter) {
this.matter = matter;
}

@Override
public long getStoredEmc() {
return Util.safeLongValue(emc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityE
@Nullable IKnowledgeProvider provider = Util.getKnowledgeProvider(owner);
if (provider == null) return;

provider.setEmc(provider.getEmc().add(emc));
BigInteger toAdd = getMatter() == Matter.FINAL ? emc : remainingEMC.min(emc);
provider.setEmc(provider.getEmc().add(toAdd));
emc = emc.subtract(toAdd).max(BigInteger.ZERO);
if (player != null) provider.syncEmc(player);
Util.markDirty(this);
emc = BigInteger.ZERO;
Expand Down Expand Up @@ -165,10 +167,15 @@ public long extractEmc(long emc, EmcAction action) {

@Override
public long insertEmc(long emc, EmcAction action) {
long v = Math.min(Util.safeLongValue(remainingEMC), emc);
boolean isFinal = getMatter() == Matter.FINAL;
long v = isFinal ? emc : Math.min(Util.safeLongValue(remainingEMC), emc);

if (emc <= 0L) return 0L;
if (action.execute()) this.emc = this.emc.add(BigInteger.valueOf(v));
if (action.execute()) {
if(!isFinal) remainingEMC = remainingEMC.subtract(BigInteger.valueOf(v));
this.emc = this.emc.add(BigInteger.valueOf(v));
Util.markDirty(this);
}

return v;
}
Expand Down Expand Up @@ -200,7 +207,8 @@ public ItemStack getStackInSlot(int slot) {
@Nonnull
@Override
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
if (slot == 0 || remainingImport <= 0 || owner == null || stack.isEmpty() || !isItemValid(slot, stack) || Util.getPlayer(owner) == null) return stack;
boolean isFinal = getMatter() == Matter.FINAL;
if (slot == 0 || (!isFinal && remainingImport <= 0) || owner == null || stack.isEmpty() || !isItemValid(slot, stack) || Util.getPlayer(owner) == null) return stack;

int count = stack.getCount();
stack = ItemHandlerHelper.copyStackWithSize(stack, 1);
Expand All @@ -210,7 +218,7 @@ public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate
ItemInfo info = ItemInfo.fromStack(stack);
if(getFilterStatus() && !NBTManager.getPersistentInfo(info).equals(info)) return stack;

int insertCount = Math.min(count, remainingImport);
int insertCount = isFinal ? count : Math.min(count, remainingImport);
if (!simulate) {
long itemValue = ProjectEAPI.getEMCProxy().getSellValue(stack);
@Nullable IKnowledgeProvider provider = Util.getKnowledgeProvider(owner);
Expand All @@ -223,7 +231,7 @@ public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate
provider.syncKnowledgeChange(player, NBTManager.getPersistentInfo(info), true);
provider.syncEmc(player);
}
remainingImport -= insertCount;
if(!isFinal) remainingImport -= insertCount;
Util.markDirty(this);
}

Expand All @@ -240,14 +248,15 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) {
}

public ItemStack extractItemInternal(int slot, int amount, boolean simulate, boolean limit) {
if (slot != 0 || remainingExport <= 0 || owner == null || itemStack.isEmpty() || Util.getPlayer(owner) == null) return ItemStack.EMPTY;
boolean isFinal = getMatter() == Matter.FINAL;
if (slot != 0 || (!isFinal && remainingExport <= 0) || owner == null || itemStack.isEmpty() || Util.getPlayer(owner) == null) return ItemStack.EMPTY;

BigInteger itemValue = BigInteger.valueOf(ProjectEAPI.getEMCProxy().getValue(itemStack));
if(itemValue.equals(BigInteger.ZERO)) return ItemStack.EMPTY;
@Nullable IKnowledgeProvider provider = Util.getKnowledgeProvider(owner);
if (provider == null) return ItemStack.EMPTY;
BigInteger maxCount = provider.getEmc().divide(itemValue).min(BigInteger.valueOf(Integer.MAX_VALUE));
int extractCount = Math.min(amount, limit ? Math.min(maxCount.intValueExact(), remainingExport) : maxCount.intValueExact());
int extractCount = Math.min(amount, limit && !isFinal ? Math.min(maxCount.intValueExact(), remainingExport) : maxCount.intValueExact());
if (extractCount <= 0) return ItemStack.EMPTY;

ItemStack r = ItemHandlerHelper.copyStackWithSize(itemStack, extractCount);
Expand All @@ -258,7 +267,7 @@ public ItemStack extractItemInternal(int slot, int amount, boolean simulate, boo
ServerPlayer player = Util.getPlayer(owner);
if (player != null) provider.syncEmc(player);

if (limit) remainingExport -= extractCount;
if (limit && !isFinal) remainingExport -= extractCount;
Util.markDirty(this);
return r;
}
Expand Down Expand Up @@ -312,7 +321,7 @@ public int getTanks() {
@Override
public FluidStack getFluidInTank(int tank) {
Fluid fluid = getFluid();
if(fluid == null|| getFluidCostPer() == 0D) return FluidStack.EMPTY;
if(fluid == null || getFluidCostPer() == 0D) return FluidStack.EMPTY;
return new FluidStack(fluid, remainingFluid);
}

Expand Down Expand Up @@ -342,8 +351,10 @@ public FluidStack drain(FluidStack resource, FluidAction action) {
@Nonnull
@Override
public FluidStack drain(int maxDrain, FluidAction action) {
boolean isFinal = getMatter() == Matter.FINAL;
Fluid fluid = getFluid();
if(fluid == null || getFluidCostPer() == 0D || Util.getPlayer(owner) == null) return FluidStack.EMPTY;
if(!isFinal && maxDrain > remainingFluid) maxDrain = remainingFluid;
if(maxDrain > remainingFluid) maxDrain = remainingFluid;
long cost = getFluidCost(maxDrain);
@Nullable IKnowledgeProvider provider = Util.getKnowledgeProvider(owner);
Expand All @@ -355,12 +366,12 @@ public FluidStack drain(int maxDrain, FluidAction action) {
// this is a bad way to estimate, it rounds up so we'll usually say less than what's really possible
BigDecimal max = dEMC.divide(BigDecimal.valueOf(getFluidCostPer()), RoundingMode.FLOOR);
maxDrain = Util.safeIntValue(max);
if(maxDrain > remainingFluid) maxDrain = remainingFluid;
if(!isFinal &&maxDrain > remainingFluid) maxDrain = remainingFluid;
if(maxDrain < 1) return FluidStack.EMPTY;
cost = getFluidCost(maxDrain);
}
if(action.execute()) {
remainingFluid -= maxDrain;
if(!isFinal) remainingFluid -= maxDrain;
Util.markDirty(this);
provider.setEmc(emc.subtract(BigInteger.valueOf(cost)));
provider.syncEmc(Objects.requireNonNull(Util.getPlayer(owner)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import cool.furry.mc.forge.projectexpansion.block.BlockRelay;
import cool.furry.mc.forge.projectexpansion.registries.BlockEntityTypes;
import cool.furry.mc.forge.projectexpansion.util.IHasMatter;
import cool.furry.mc.forge.projectexpansion.util.Matter;
import cool.furry.mc.forge.projectexpansion.util.TagNames;
import cool.furry.mc.forge.projectexpansion.util.Util;
import moze_intel.projecte.api.capabilities.PECapabilities;
Expand All @@ -23,8 +25,9 @@
import java.util.List;

@SuppressWarnings("unused")
public class BlockEntityRelay extends BlockEntity implements IEmcStorage {
public class BlockEntityRelay extends BlockEntity implements IEmcStorage, IHasMatter {
public BigInteger emc = BigInteger.ZERO;
public Matter matter;
private final LazyOptional<IEmcStorage> emcStorageCapability = LazyOptional.of(() -> this);
public static final Direction[] DIRECTIONS = Direction.values();
public BlockEntityRelay(BlockPos pos, BlockState state) {
Expand Down Expand Up @@ -66,6 +69,22 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityR
emc = Util.spreadEMC(emc, temp, Util.safeLongValue(transfer));
}


@Nonnull
@Override
public Matter getMatter() {
if (level != null) {
BlockRelay block = (BlockRelay) getBlockState().getBlock();
if (block.getMatter() != matter) setMatter(block.getMatter());
return matter;
}
return Matter.BASIC;
}

private void setMatter(Matter matter) {
this.matter = matter;
}

@Override
public long getStoredEmc() {
return Util.safeLongValue(emc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ public MutableComponent getFormattedComponent(long value) {
}

public MutableComponent getFormattedComponent(BigInteger value) {
// && !Screen.hasShiftDown()
return (this == FINAL ? Component.literal("INFINITY") : EMCFormat.getComponent(value)).setStyle(ColorStyle.GREEN);
}

Expand All @@ -210,6 +211,10 @@ public MutableComponent getEMCLinkEMCLimitComponent() {
return getFormattedComponent(getEMCLinkEMCLimit());
}

public MutableComponent getRelayTransferComponent() {
return getFormattedComponent(getRelayTransferForTicks(Config.tickDelay.get()));
}

/* Registry Objects */

public @Nullable Item getMatter() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ public static BigInteger spreadEMC(BigInteger emc, List<IEmcStorage> storageList
long oldVal = val;
val -= storage.insertEmc(div, EmcAction.EXECUTE);
if(val.equals(oldVal)) notAccepting.add(storage);
if(maxPer != null && oldVal - val >= maxPer) notAccepting.add(storage);
}
}
return val;
Expand Down

0 comments on commit 8331d6b

Please sign in to comment.