Skip to content

Commit

Permalink
integrations
Browse files Browse the repository at this point in the history
  • Loading branch information
DonovanDMC committed Mar 31, 2024
1 parent f80ba2d commit c5303b8
Show file tree
Hide file tree
Showing 29 changed files with 415 additions and 157 deletions.
10 changes: 7 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -114,17 +114,21 @@ dependencies {
runtimeOnly fg.deobf("curse.maven:itank-256991:${getProperty("itankVersion")}")
runtimeOnly fg.deobf("curse.maven:cloth-config-348521:${getProperty("clothVersion")}")
runtimeOnly fg.deobf("curse.maven:better-advancements-272515:${getProperty("baVersion")}")

compileOnly fg.deobf("curse.maven:jade-api-324717:${getProperty("jadeApiVersion")}")
runtimeOnly fg.deobf("curse.maven:jade-324717:${getProperty("jadeVersion")}")

compileOnly fg.deobf("curse.maven:wthit-455982:${getProperty("wthitVersion")}")
// runtimeOnly fg.deobf("curse.maven:wthit-455982:${getProperty("wthitVersion")}")
// runtimeOnly fg.deobf("curse.maven:bad-packets-615134:${getProperty("badPacketsVersion")}")

// https://github.com/McJtyMods/TheOneProbe/issues/548
compileOnly fg.deobf("mcjty.theoneprobe:theoneprobe:${getProperty("topVersion")}:api") {
transitive = false
}
runtimeOnly fg.deobf("mcjty.theoneprobe:theoneprobe:${getProperty("topVersion")}") {
transitive = false
}
// runtimeOnly fg.deobf("mcjty.theoneprobe:theoneprobe:${getProperty("topVersion")}") {
// transitive = false
// }
}

jar {
Expand Down
4 changes: 3 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ jadeApiVersion=4914106
jadeVersion=4914105
topVersion=1.19-6.2.0-6
# 5.24.0
wthitVersion=5208194
wthitVersion=5208194
# 0.2.3
badPacketsVersion=4784364
25 changes: 21 additions & 4 deletions src/generated/resources/assets/projectexpansion/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -544,10 +544,27 @@
"text.projectexpansion.disabled": "Disabled ✗",
"text.projectexpansion.alchemical_collection": "Alchemical Collection: %s",
"text.projectexpansion.pos.outofbounds": "That position is outside the allowed boundaries.",
"death.attack.walk_on_sun": "%s tried to walk on the sun.",
"death.attack.walk_on_sun.player": "%s tried to walk on the sun whilst fighting %s.",
"death.attack.stare_at_sun": "%s decided staring at the sun was a good idea.",
"death.attack.stare_at_sun.player": "%s decided to stare at the sun whilst fighting %s.",
"text.projectexpansion.color": "Color: %s",
"text.projectexpansion.sun_level": "Sun Level: %s",
"text.projectexpansion.sun_bonus": "Sun Bonus: %s",
"text.projectexpansion.filter_status": "Filter Status: %s",
"text.projectexpansion.emc_per_second": "EMC Generation: %s/s",
"text.projectexpansion.emc_per_second_bonus": "EMC Generation: %s/s",
"text.projectexpansion.emc_storage": "EMC Storage: %s/%s",
"text.projectexpansion.emc_limit": "EMC Limit: %s",
"text.projectexpansion.emc_transfer_rate": "EMC Transfer Rate: %s/s",
"text.projectexpansion.relay_bonus": "Bonus: %s",
"text.projectexpansion.emc_import_limit": "EMC Import Limit: %s/%s",
"text.projectexpansion.item_export_limit": "Item Export Limit: %s/%s",
"text.projectexpansion.item_import_limit": "Item Import Limit: %s/%s",
"text.projectexpansion.fluid_export_limit": "Fluid Export Limit: %s/%s",
"text.projectexpansion.fluid_export_efficiency": "Fluid Export Efficiency: %s%",
"text.projectexpansion.owner": "Owner: %s",
"death.attack.walk_on_sun": "%s tried to walk on the sun",
"death.attack.walk_on_sun.player": "%s tried to walk on the sun whilst fighting %s",
"death.attack.stare_at_sun": "%s decided staring at the sun was a good idea",
"death.attack.stare_at_sun.player": "%s decided to stare at the sun whilst fighting %s",
"config.jade.plugin_projectexpansion.provider": "Project Expansion Provider",
"sounds.projectexpansion.knowledge_sharing_book.store": "Knowledge Stored",
"sounds.projectexpansion.knowledge_sharing_book.use": "Knowledge Gained",
"sounds.projectexpansion.knowledge_sharing_book.use_none": "No Knowledge Gained",
Expand Down
2 changes: 1 addition & 1 deletion src/main/generation
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -70,7 +71,7 @@ public void appendHoverText(ItemStack stack, @Nullable BlockGetter level, List<C
list.add(Lang.Blocks.COLLECTOR_TOOLTIP.translateColored(ChatFormatting.GRAY));
list.add(Lang.Blocks.COLLECTOR_EMC.translateColored(ChatFormatting.GRAY, EMCFormat.getComponent(getMatter().getCollectorOutputForTicks(Config.tickDelay.get())).setStyle(ColorStyle.GREEN)));
if(stack.getCount() > 1) {
list.add(Lang.Blocks.COLLECTOR_STACK_EMC.translateColored(ChatFormatting.GRAY, EMCFormat.getComponent(getMatter().getCollectorOutputForTicks(Config.tickDelay.get()).multiply(BigInteger.valueOf(stack.getCount()))).setStyle(ColorStyle.GREEN)));
list.add(Lang.Blocks.COLLECTOR_STACK_EMC.translateColored(ChatFormatting.GRAY, EMCFormat.getComponent(getMatter().getCollectorOutputForTicks(Config.tickDelay.get()).multiply(BigDecimal.valueOf(stack.getCount()))).setStyle(ColorStyle.GREEN)));
}
list.add(Lang.Blocks.COLLECTOR_MAX_STORAGE.translateColored(ChatFormatting.GRAY, EMCFormat.getComponent(Fuel.getCollectorEMCLimit(getMatter())).setStyle(ColorStyle.GREEN)));
list.add(Lang.SEE_WIKI.translateColored(ChatFormatting.AQUA));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
@Override
public void appendHoverText(ItemStack stack, @Nullable BlockGetter level, List<Component> list, TooltipFlag flag) {
super.appendHoverText(stack, level, list, flag);
list.add(Lang.Blocks.EMC_LINK_TOOLTIP.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkItemLimitComponent()));
list.add(Lang.Blocks.EMC_LINK_LIMIT_ITEMS.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkFluidLimitComponent()));
list.add(Lang.Blocks.EMC_LINK_LIMIT_FLUIDS.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkEMCLimitComponent()));
list.add(Lang.Blocks.EMC_LINK_TOOLTIP.translateColored(ChatFormatting.GRAY));
list.add(Lang.Blocks.EMC_LINK_LIMIT_ITEMS.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkItemLimitComponent()));
list.add(Lang.Blocks.EMC_LINK_LIMIT_FLUIDS.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkFluidLimitComponent()));
list.add(Lang.Blocks.EMC_LINK_FLUID_EXPORT_EFFICIENCY.translateColored(ChatFormatting.GRAY, Component.literal(getMatter().getFluidEfficiencyPercentage() + "%").setStyle(ColorStyle.GREEN)));
list.add(Lang.Blocks.EMC_LINK_LIMIT_EMC.translateColored(ChatFormatting.GRAY, getMatter().getEMCLinkEMCLimitComponent()));
list.add(Lang.SEE_WIKI.translateColored(ChatFormatting.AQUA));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import cool.furry.mc.forge.projectexpansion.block.BlockAdvancedAlchemicalChest;
import cool.furry.mc.forge.projectexpansion.gui.container.ContainerAdvancedAlchemicalChest;
import cool.furry.mc.forge.projectexpansion.util.AdvancedAlchemicalChest;
import cool.furry.mc.forge.projectexpansion.util.IChestLike;
import cool.furry.mc.forge.projectexpansion.util.Lang;
import cool.furry.mc.forge.projectexpansion.util.Util;
import cool.furry.mc.forge.projectexpansion.util.*;
import moze_intel.projecte.api.capabilities.PECapabilities;
import moze_intel.projecte.gameObjs.items.AlchemicalBag;
import net.minecraft.core.BlockPos;
Expand Down Expand Up @@ -35,7 +32,7 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class BlockEntityAdvancedAlchemicalChest extends BlockEntityOwnable implements IChestLike, IItemHandler {
public class BlockEntityAdvancedAlchemicalChest extends BlockEntityOwnable implements IChestLike, IHasColor, IItemHandler {
private final ChestLidController lidController = new ChestLidController();

private final ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() {
Expand Down Expand Up @@ -69,6 +66,12 @@ public BlockEntityAdvancedAlchemicalChest(BlockPos pos, BlockState state, BlockE
this.color = color;
}

@NotNull
@Override
public DyeColor getColor() {
return color;
}

public @Nullable IItemHandler getBag() {
@Nullable ServerPlayer player = Util.getPlayer(level, owner);
if(player == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
import java.util.Optional;

@SuppressWarnings("unused")
public class BlockEntityCollector extends BlockEntityEMC implements IHasMatter, IHasSunBonus, MenuProvider {
public class BlockEntityCollector extends BlockEntityEMC implements IHasMatter, IHasSunBonus, IGeneratesEMC, MenuProvider {
// this probably doesn't work
private final ItemStackHandler input = new StackHandler(getInvSize()) {
@Override
Expand Down Expand Up @@ -78,7 +78,6 @@ protected void onContentsChanged(int slot) {
public BlockEntityCollector(BlockPos pos, BlockState state) {
super(BlockEntityTypes.COLLECTOR.get(), pos, state);
this.itemHandlerResolver = new CollectorItemHandlerProvider();
setMaximumEMC(BigInteger.valueOf(Fuel.getCollectorEMCLimit(Objects.requireNonNull(getMatter()))));
resetStackHandlers();
}

Expand Down Expand Up @@ -144,13 +143,13 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityC
}

private void updateEmc() {
BigInteger gen = getMatter().getCollectorOutputForTicks(Config.enableCollectorOptimizations.get() ? 20 : 1);
BigDecimal gen = getMatter().getCollectorOutputForTicks(Config.enableCollectorOptimizations.get() ? 20 : 1);
if(hasSunBonus() && getSunBonus() != null) {
gen = gen.multiply(BigInteger.valueOf(getSunBonus()));
gen = gen.multiply(BigDecimal.valueOf(getSunBonus()));
}
final BigInteger generated = gen; // Thanks Java
final BigDecimal generated = gen; // Thanks Java
if (!this.hasMaxedEmc()) {
unprocessedEMC = unprocessedEMC.add(new BigDecimal(generated).multiply(BigDecimal.valueOf(getSunLevel() / 16.0f)));
unprocessedEMC = unprocessedEMC.add(generated.multiply(BigDecimal.valueOf(getSunLevel() / 16.0f)));
if (unprocessedEMC.compareTo(BigDecimal.ONE) >= 0) {
//Force add the EMC regardless of if we can receive EMC from external sources
unprocessedEMC = unprocessedEMC.subtract(new BigDecimal(forceInsertEmcBigInteger(unprocessedEMC.toBigInteger(), EmcAction.EXECUTE)));
Expand All @@ -163,7 +162,7 @@ private void updateEmc() {
ItemStack upgrading = getUpgrading();
if (hasChargeableItem) {
upgrading.getCapability(PECapabilities.EMC_HOLDER_ITEM_CAPABILITY).ifPresent(emcHolder -> {
BigInteger remaining = Util.stepBigInteger((getStoredEmcBigInteger().min(generated)), (val) -> emcHolder.insertEmc(upgrading, val, EmcAction.EXECUTE));
BigInteger remaining = Util.stepBigInteger((getStoredEmcBigInteger().min(generated.toBigInteger())), (val) -> emcHolder.insertEmc(upgrading, val, EmcAction.EXECUTE));
BigInteger v = getStoredEmcBigInteger().subtract(remaining);
forceExtractEmcBigInteger(v, EmcAction.EXECUTE);
});
Expand Down Expand Up @@ -192,13 +191,23 @@ private void updateEmc() {
}
} else {
// Only send EMC when we are not upgrading fuel or charging an item
BigInteger toSend = this.getStoredEmcBigInteger().compareTo(generated) < 0 ? this.getStoredEmcBigInteger() : generated;
this.sendToAllAcceptors(toSend);
this.sendRelayBonus();
BigInteger toSend = getStoredEmcBigInteger().compareTo(generated.toBigInteger()) < 0 ? getStoredEmcBigInteger() : generated.toBigInteger();
sendToAllAcceptors(toSend);
sendRelayBonus();
}
}
}

@Override
public BigInteger getMaximumEmcBigInteger() {
boolean sunBonus = hasSunBonus();
BigInteger max = BigInteger.valueOf(Fuel.getCollectorEMCLimit(Objects.requireNonNull(getMatter())));
if (sunBonus) {
max = max.multiply(BigInteger.valueOf(Objects.requireNonNull(getSunBonus())));
}
return max;
}

public long getEmcToNextGoal() {
ItemStack lock = getLock();
ItemStack upgrading = getUpgrading();
Expand Down Expand Up @@ -291,7 +300,7 @@ private void sendRelayBonus() {
for (int i = 0; i < 20; i++) b.addBonus();
Util.markDirty(b);
} else if (be instanceof BlockEntityRelay b) {
b.getEMCHandlerCapability().addBonus();
b.addBonus();
Util.markDirty(b);
}
}
Expand Down Expand Up @@ -341,6 +350,14 @@ public boolean hasSunBonus() {
return BlockCompactSun.adjacent(level, worldPosition, Direction.UP);
}

@Override
public BigInteger getGeneratedEMC() {
return new BigDecimal(getMatter().getCollectorOutput())
.multiply(BigDecimal.valueOf(getSunBonus() == null ? 1 : getSunBonus()))
.multiply(BigDecimal.valueOf(getSunLevel() / 16.0f))
.toBigInteger();
}

@Override
public Component getDisplayName() {
return Lang.Blocks.COLLECTOR.translate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
Expand Down Expand Up @@ -173,6 +174,10 @@ protected BigInteger forceInsertEmcBigInteger(BigInteger toAccept, EmcAction act
}

protected void sendToAllAcceptors(BigInteger emc) {
sendToAllAcceptors(emc, Long.MAX_VALUE);
}

protected void sendToAllAcceptors(BigInteger emc, long transferLimit) {
if(level == null || !canProvideEmc()) {
return;
}
Expand All @@ -194,7 +199,7 @@ protected void sendToAllAcceptors(BigInteger emc) {
}
}

BigInteger remaining = Util.spreadEMC(emc, targets);
BigInteger remaining = Util.spreadEMC(emc, targets, transferLimit);
forceExtractEmcBigInteger(emc.subtract(remaining), EmcAction.EXECUTE);
}

Expand Down Expand Up @@ -233,11 +238,10 @@ public void load(CompoundTag tag) {
}

public void markDirty(boolean recheckComparators) {
//Copy of the base impl of markDirty in BlockEntity, except only updates comparator state when something changed
// and if our block supports having a comparator signal, instead of always doing it
if (level != null) {
if (level.hasChunkAt(worldPosition)) {
level.getChunkAt(worldPosition).setUnsaved(true);
level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_CLIENTS);
}
if (recheckComparators && !level.isClientSide) {
updateComparators = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,6 @@ private void setMatter(Matter matter) {
this.matter = matter;
}

private void markDirty() {
Util.markDirty(this);
}
public InteractionResult handleActivation(Player player, InteractionHand hand) {
ItemStack inHand = player.getItemInHand(hand);
ItemHandler itemHandler = getItemHandlerCapability();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
Expand Down Expand Up @@ -69,4 +71,23 @@ public boolean handleActivation(Player player, ActivationType activationType) {
public void handlePlace(@Nullable LivingEntity livingEntity, ItemStack stack) {
if (livingEntity instanceof Player player) setOwner(player);
}

public void markDirty() {
if (level != null) {
if (level.hasChunkAt(worldPosition)) {
level.getChunkAt(worldPosition).setUnsaved(true);
level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_CLIENTS);
}
}
}

@Override
public final CompoundTag getUpdateTag() {
return saveWithoutMetadata();
}

@Override
public final ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@

import javax.annotation.Nonnull;
import java.math.BigInteger;
import java.util.Objects;

@SuppressWarnings("unused")
public class BlockEntityPowerFlower extends BlockEntityOwnable implements IHasMatter, IHasSunBonus {
public class BlockEntityPowerFlower extends BlockEntityOwnable implements IHasMatter, IHasSunBonus, IEmcStorageBigInteger, IGeneratesEMC {
public BigInteger emc = BigInteger.ZERO;
public BlockEntityPowerFlower(BlockPos pos, BlockState state) {
super(BlockEntityTypes.POWER_FLOWER.get(), pos, state);
Expand Down Expand Up @@ -53,10 +54,10 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityP
if (player != null) {
PowerFlowerCollector.add(player, emc.add(res));
emc = BigInteger.ZERO;
Util.markDirty(this);
markDirty();
} else {
emc = emc.add(res);
Util.markDirty(this);
markDirty();
}
}

Expand All @@ -69,4 +70,43 @@ public void tickServer(Level level, BlockPos pos, BlockState state, BlockEntityP
public boolean hasSunBonus() {
return BlockCompactSun.adjacent(level, worldPosition, Direction.DOWN);
}

@Override
public BigInteger getStoredEmcBigInteger() {
return emc;
}

@Override
public BigInteger getMaximumEmcBigInteger() {
BigInteger max = BigInteger.valueOf(Long.MAX_VALUE);
if(hasSunBonus()) {
max = max.multiply(BigInteger.valueOf(Objects.requireNonNull(getSunBonus())));
}
return max;
}

@Override
public BigInteger extractEmcBigInteger(BigInteger toExtract, EmcAction action) {
if (toExtract.compareTo(BigInteger.ZERO) < 0) {
return insertEmcBigInteger(toExtract.negate(), action);
}
return BigInteger.ZERO;
}

@Override
public BigInteger insertEmcBigInteger(BigInteger toAccept, EmcAction action) {
if (toAccept.compareTo(BigInteger.ZERO) < 0) {
return extractEmcBigInteger(toAccept.negate(), action);
}
return BigInteger.ZERO;
}

@Override
public BigInteger getGeneratedEMC() {
BigInteger generated = getMatter().getPowerFlowerOutput();
if(hasSunBonus() && getSunBonus() != null) {
generated = generated.multiply(BigInteger.valueOf(getSunBonus()));
}
return generated;
}
}

0 comments on commit c5303b8

Please sign in to comment.