Skip to content

Commit

Permalink
feat: added support for industrial foregoing infinity items (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
GoryMoon authored Sep 17, 2024
1 parent 089a441 commit ef89eb9
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 11 deletions.
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ dependencies {

implementation fg.deobf("curse.maven:flux-networks-248020:${flux_version}")

implementation fg.deobf("curse.maven:titanium-287342:5468426")
implementation fg.deobf("curse.maven:industrial-foregoing-266515:${if_version}")

implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
jarJar(group: 'com.tterrag.registrate', name: 'Registrate', version: "[MC1.20,MC1.21)")
}
Expand Down
5 changes: 4 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ ccl_version=4.4.0.+
brandon_core_version=3.2.1.+

# Flux-Networks-1.20.1-7.2.1
flux_version=5234697
flux_version=5234697

# industrial-foregoing-1.20.1-3.5.17
if_version=5355551
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public ChargerBlock(Block.Properties properties) {
}

@Override
public InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult result) {
public @NotNull InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult result) {
if (level.isClientSide)
return InteractionResult.SUCCESS;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;
import org.jetbrains.annotations.NotNull;
import se.gory_moon.chargers.LangKeys;
import se.gory_moon.chargers.Utils;
import se.gory_moon.chargers.block.entity.BlockEntityRegistry;
Expand All @@ -33,17 +34,25 @@ public WirelessChargerBlock(Block.Properties properties) {
}

@Override
public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) {
public InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult result) {
if (level.isClientSide)
return InteractionResult.SUCCESS;

BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity instanceof WirelessChargerBlockEntity changerEntity && changerEntity.getStorage() != null) {
if (player.isShiftKeyDown())
return InteractionResult.FAIL;

boolean powered = changerEntity.isPowered();
Component status = Component.translatable((powered ? LangKeys.CHAT_DISABLED.key(): LangKeys.CHAT_ENABLED.key())).setStyle(Style.EMPTY.withColor(powered ? ChatFormatting.RED: ChatFormatting.GREEN));
player.displayClientMessage(Component.translatable(LangKeys.CHAT_WIRELESS_CHARGER_INFO.key(), status, Utils.formatAndClean(changerEntity.getStorage().getLongEnergyStored()), Utils.formatAndClean(changerEntity.getStorage().getLongMaxEnergyStored())), true);
Component status = Component.translatable((powered ? LangKeys.CHAT_DISABLED.key() : LangKeys.CHAT_ENABLED.key()))
.setStyle(Style.EMPTY.withColor(powered ? ChatFormatting.RED : ChatFormatting.GREEN));

var storage = changerEntity.getStorage();
var text = Component.translatable(LangKeys.CHAT_WIRELESS_CHARGER_INFO.key(),
status,
Utils.formatAndClean(storage.getLongEnergyStored()),
Utils.formatAndClean(storage.getLongMaxEnergyStored()));
player.displayClientMessage(text, true);
}

return InteractionResult.SUCCESS;
Expand Down
26 changes: 20 additions & 6 deletions src/main/java/se/gory_moon/chargers/compat/ChargeCompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.IEnergyStorage;
import se.gory_moon.chargers.compat.bc.BrandonsCoreCompat;
import se.gory_moon.chargers.compat.industrial.IndustrialForegoingCompat;
import se.gory_moon.chargers.power.CustomEnergyStorage;

import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;

Expand Down Expand Up @@ -74,11 +74,11 @@ public boolean chargeItem(ItemStack stack, CustomEnergyStorage blockStorage, lon

LazyOptional<IEnergyStorage> capability = stack.getCapability(ForgeCapabilities.ENERGY);
capability.ifPresent(itemStorage -> {
long transferRequest = overrideTransfer;
var transferRequest = overrideTransfer;
if (transferRequest < 0)
transferRequest = blockStorage.extractLongEnergy(blockStorage.getLongMaxEnergyStored(), true);

long transferred = receiveAmount(itemStorage, transferRequest);
var transferred = receiveAmount(itemStorage, transferRequest);
if (transferred > 0) {
transferredCallback.accept(transferred);
}
Expand All @@ -101,7 +101,7 @@ private long extractAmount(IEnergyStorage storage, long extractAmount) {
}

if (BrandonsCoreCompat.INSTANCE.isLoaded()) {
Optional<Long> amount = BrandonsCoreCompat.INSTANCE.extractAmount(storage, extractAmount);
var amount = BrandonsCoreCompat.INSTANCE.extractAmount(storage, extractAmount);
if (amount.isPresent()) {
return amount.get();
}
Expand All @@ -122,7 +122,14 @@ private long receiveAmount(IEnergyStorage storage, long receiveAmount) {
}

if (BrandonsCoreCompat.INSTANCE.isLoaded()) {
Optional<Long> amount = BrandonsCoreCompat.INSTANCE.receiveAmount(storage, receiveAmount);
var amount = BrandonsCoreCompat.INSTANCE.receiveAmount(storage, receiveAmount);
if (amount.isPresent()) {
return amount.get();
}
}

if (IndustrialForegoingCompat.INSTANCE.isLoaded()) {
var amount = IndustrialForegoingCompat.INSTANCE.receiveAmount(storage, receiveAmount);
if (amount.isPresent()) {
return amount.get();
}
Expand All @@ -142,7 +149,14 @@ private boolean isStorageFull(IEnergyStorage storage) {
}

if (BrandonsCoreCompat.INSTANCE.isLoaded()) {
Optional<Boolean> isFull = BrandonsCoreCompat.INSTANCE.isStorageFull(storage);
var isFull = BrandonsCoreCompat.INSTANCE.isStorageFull(storage);
if (isFull.isPresent()) {
return isFull.get();
}
}

if (IndustrialForegoingCompat.INSTANCE.isLoaded()) {
var isFull = IndustrialForegoingCompat.INSTANCE.isStorageFull(storage);
if (isFull.isPresent()) {
return isFull.get();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package se.gory_moon.chargers.compat.industrial;

import com.buuz135.industrial.item.infinity.InfinityEnergyStorage;
import net.minecraftforge.energy.IEnergyStorage;
import net.minecraftforge.fml.ModList;

import java.util.Optional;

public class IndustrialForegoingCompat {
public static IndustrialForegoingCompat INSTANCE = new IndustrialForegoingCompat();

private boolean isLoaded = false;

private IndustrialForegoingCompat() {
isLoaded = ModList.get().isLoaded("industrialforegoing");
}

/**
* Returns if Industrial Foregoing is loaded or not
*
* @return The mod is loaded or not
*/
public boolean isLoaded() {
return isLoaded;
}

/**
* Tries to receive energy into an InfinityEnergyStorage
*
* @param storage The storage to check
* @param receiveAmount The max amount to insert
* @return The amount that was successfully inserted, or empty if the storage wasn't an InfinityEnergyStorage
*/
public Optional<Long> receiveAmount(IEnergyStorage storage, long receiveAmount) {
if (storage instanceof InfinityEnergyStorage<?> ieStorage) {
long toAdd = Math.min(Long.MAX_VALUE - ieStorage.getLongEnergyStored(), receiveAmount);

// Set the new amount into the storage
ieStorage.setEnergyStored(ieStorage.getLongEnergyStored() + toAdd);
return Optional.of(toAdd);
}
return Optional.empty();
}

/**
* Checks if the storage is full or not
*
* @param storage The storage to check
* @return If the storage is full or not, or empty if the storage wasn't an InfinityEnergyStorage
*/
public Optional<Boolean> isStorageFull(IEnergyStorage storage) {
if (storage instanceof InfinityEnergyStorage<?> ieStorage) {
return Optional.of(ieStorage.getLongEnergyStored() >= ieStorage.getLongCapacity());
}
return Optional.empty();
}
}
7 changes: 7 additions & 0 deletions src/main/resources/META-INF/mods.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ A mod that adds item charger blocks in tiers and a wireless one'''
ordering="AFTER"
side="BOTH"

[[dependencies.chargers]]
modId="industrialforegoing"
mandatory=false
versionRange="[3.5,)"
ordering="AFTER"
side="BOTH"

[[dependencies.chargers]]
modId="minecraft"
mandatory=true
Expand Down

0 comments on commit ef89eb9

Please sign in to comment.