Skip to content

Commit

Permalink
Fixes #785: Adds a part variant of the energy acceptor (#5232)
Browse files Browse the repository at this point in the history
* Fixes #785: Adds a part variant of the energy acceptor

As Forge now moved to pretty much FE only we can add a part variant of
the energy acceptor without causing various problems by directly
exposing a particular energy API on every single cable.

This also means we most likely will no longer be able to support any non
capability based energy API should they arise as this will cause a
mismatch between what the block and part variants can handle.

Co-authored-by: shartte <shartte@users.noreply.github.com>
  • Loading branch information
yueh and shartte authored May 26, 2021
1 parent 6700882 commit dc284e2
Show file tree
Hide file tree
Showing 17 changed files with 361 additions and 50 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ jobs:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- name: Clean gradle
run: ./gradlew clean --no-daemon --max-workers 1
run: ./gradlew clean --no-daemon
- name: Validate no assets
run: test ! -d ./src/generated
- name: Generate assets
run: ./gradlew runData --no-daemon --max-workers 1
run: ./gradlew runData --no-daemon
- name: Validate assets
run: test -d ./src/generated -a -f ./src/generated/resources/.cache/cache
- name: Build with Gradle
run: ./gradlew build --no-daemon --max-workers 1
run: ./gradlew build --no-daemon --info
6 changes: 3 additions & 3 deletions .github/workflows/master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ jobs:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- name: Clean gradle
run: ./gradlew clean --no-daemon --max-workers 1
run: ./gradlew clean --no-daemon
- name: Validate no assets
run: test ! -d ./src/generated
- name: Generate assets
run: ./gradlew runData --no-daemon --max-workers 1
run: ./gradlew runData --no-daemon
- name: Validate assets
run: test -d ./src/generated -a -f ./src/generated/resources/.cache/cache
- name: Build with Gradle
run: ./gradlew build --no-daemon --max-workers 1
run: ./gradlew build --no-daemon --info
6 changes: 3 additions & 3 deletions .github/workflows/pull_requests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,17 @@ jobs:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- name: Clean gradle
run: ./gradlew clean --no-daemon --max-workers 1
run: ./gradlew clean --no-daemon
- name: Validate no assets
run: test ! -d ./src/generated
- name: Generate assets
run: ./gradlew runData --no-daemon --max-workers 1
run: ./gradlew runData --no-daemon
- name: Validate assets
run: test -d ./src/generated -a -f ./src/generated/resources/.cache/cache
- name: Build with Gradle
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
run: ./gradlew build --no-daemon --max-workers 1
run: ./gradlew build --no-daemon --info
- uses: actions/upload-artifact@v2
with:
name: dist
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

buildscript {
repositories {
maven { url = 'https://files.minecraftforge.net/maven' }
maven { url = 'https://maven.minecraftforge.net' }
maven { url = 'https://repo.spongepowered.org/maven' }
mavenCentral()
}
Expand Down
2 changes: 2 additions & 0 deletions src/api/java/appeng/api/definitions/IParts.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,6 @@ public interface IParts {
IItemDefinition fluidAnnihilationPlane();

IItemDefinition fluidFormationnPlane();

IItemDefinition energyAcceptor();
}
9 changes: 9 additions & 0 deletions src/main/java/appeng/core/api/definitions/ApiParts.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import appeng.parts.misc.ToggleBusPart;
import appeng.parts.networking.CoveredCablePart;
import appeng.parts.networking.CoveredDenseCablePart;
import appeng.parts.networking.EnergyAcceptorPart;
import appeng.parts.networking.GlassCablePart;
import appeng.parts.networking.QuartzFiberPart;
import appeng.parts.networking.SmartCablePart;
Expand Down Expand Up @@ -123,6 +124,7 @@ public final class ApiParts implements IParts {
private final IItemDefinition fluidExportBus;
private final IItemDefinition fluidTerminal;
private final IItemDefinition fluidStorageBus;
private final IItemDefinition energyAcceptor;

private FeatureFactory registry;
private PartModels partModels;
Expand Down Expand Up @@ -185,6 +187,8 @@ public ApiParts(FeatureFactory registry, PartModels partModels) {
InterfaceTerminalPart::new);
this.fluidTerminal = createPart("fluid_terminal", FluidTerminalPart.class, FluidTerminalPart::new);

this.energyAcceptor = createPart("cable_energy_acceptor", EnergyAcceptorPart.class, EnergyAcceptorPart::new);

this.registry = null;
this.partModels = null;
}
Expand Down Expand Up @@ -421,4 +425,9 @@ public IItemDefinition fluidAnnihilationPlane() {
public IItemDefinition fluidFormationnPlane() {
return this.fluidFormationPlane;
}

@Override
public IItemDefinition energyAcceptor() {
return this.energyAcceptor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,22 @@
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/

package appeng.tile.powersink;
package appeng.helpers;

import net.minecraftforge.energy.IEnergyStorage;

import appeng.api.config.Actionable;
import appeng.api.config.PowerUnits;
import appeng.tile.powersink.IExternalPowerSink;

/**
* Adapts an {@link IExternalPowerSink} to Forges {@link IEnergyStorage}.
*/
class ForgeEnergyAdapter implements IEnergyStorage {
public class ForgeEnergyAdapter implements IEnergyStorage {

private final IExternalPowerSink sink;

ForgeEnergyAdapter(IExternalPowerSink sink) {
public ForgeEnergyAdapter(IExternalPowerSink sink) {
this.sink = sink;
}

Expand Down
152 changes: 152 additions & 0 deletions src/main/java/appeng/parts/networking/EnergyAcceptorPart.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2021, TeamAppliedEnergistics, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/

package appeng.parts.networking;

import javax.annotation.Nonnull;

import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;

import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.config.PowerUnits;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.parts.IPartCollisionHelper;
import appeng.api.parts.IPartModel;
import appeng.api.util.AECableType;
import appeng.api.util.AEPartLocation;
import appeng.capabilities.Capabilities;
import appeng.core.AppEng;
import appeng.helpers.ForgeEnergyAdapter;
import appeng.items.parts.PartModels;
import appeng.me.GridAccessException;
import appeng.parts.AEBasePart;
import appeng.parts.PartModel;
import appeng.tile.powersink.IExternalPowerSink;

public class EnergyAcceptorPart extends AEBasePart implements IExternalPowerSink {

@PartModels
private static final IPartModel MODELS = new PartModel(new ResourceLocation(AppEng.MOD_ID, "part/energy_acceptor"));
private ForgeEnergyAdapter forgeEnergyAdapter;
private LazyOptional<ForgeEnergyAdapter> forgeEnergyAdapterOptional;

public EnergyAcceptorPart(final ItemStack is) {
super(is);
this.getProxy().setIdlePowerUsage(0);
this.forgeEnergyAdapter = new ForgeEnergyAdapter(this);
this.forgeEnergyAdapterOptional = LazyOptional.of(() -> forgeEnergyAdapter);
}

@Override
@Nonnull
public <T> LazyOptional<T> getCapability(Capability<T> capability) {
if (capability == Capabilities.FORGE_ENERGY) {
return (LazyOptional<T>) this.forgeEnergyAdapterOptional;
}

return super.getCapability(capability);
}

@Override
public AECableType getCableConnectionType(final AEPartLocation dir) {
return AECableType.GLASS;
}

@Override
public void getBoxes(final IPartCollisionHelper bch) {
bch.addBox(2, 2, 14, 14, 14, 16);
bch.addBox(4, 4, 12, 12, 12, 14);
}

@Override
public float getCableConnectionLength(AECableType cable) {
return 2;
}

@Override
public IPartModel getStaticModels() {
return MODELS;
}

@Override
public final double getExternalPowerDemand(final PowerUnits externalUnit, final double maxPowerRequired) {
return PowerUnits.AE.convertTo(externalUnit,
Math.max(0.0, this.getFunnelPowerDemand(externalUnit.convertTo(PowerUnits.AE, maxPowerRequired))));
}

protected double getFunnelPowerDemand(final double maxRequired) {
try {
final IEnergyGrid grid = this.getProxy().getEnergy();

return grid.getEnergyDemand(maxRequired);
} catch (final GridAccessException e) {
return 0;
}
}

@Override
public final double injectExternalPower(final PowerUnits input, final double amt, Actionable mode) {
return PowerUnits.AE.convertTo(input, this.funnelPowerIntoStorage(input.convertTo(PowerUnits.AE, amt), mode));
}

protected double funnelPowerIntoStorage(final double power, final Actionable mode) {
try {
final IEnergyGrid grid = this.getProxy().getEnergy();
final double leftOver = grid.injectPower(power, mode);

return leftOver;
} catch (final GridAccessException e) {
return power;
}
}

@Override
public final double injectAEPower(double amt, final Actionable mode) {
return amt;
}

@Override
public final double getAEMaxPower() {
return 0;
}

@Override
public final double getAECurrentPower() {
return 0;
}

@Override
public final boolean isAEPublicPowerStorage() {
return false;
}

@Override
public final AccessRestriction getPowerFlow() {
return AccessRestriction.READ_WRITE;
}

@Override
public final double extractAEPower(final double amt, final Actionable mode, final PowerMultiplier multiplier) {
return 0;
}
}
28 changes: 1 addition & 27 deletions src/main/java/appeng/tile/powersink/AEBasePoweredTileEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import appeng.api.networking.energy.IAEPowerStorage;
import appeng.api.networking.events.MENetworkPowerStorage.PowerEventType;
import appeng.capabilities.Capabilities;
import appeng.helpers.ForgeEnergyAdapter;
import appeng.tile.AEBaseInvTileEntity;

public abstract class AEBasePoweredTileEntity extends AEBaseInvTileEntity
Expand All @@ -58,14 +59,10 @@ public abstract class AEBasePoweredTileEntity extends AEBaseInvTileEntity
// Cache the optional to not continuously re-allocate it or the supplier
private final LazyOptional<IEnergyStorage> forgeEnergyAdapterOptional;

// IC2 private IC2PowerSink ic2Sink;

public AEBasePoweredTileEntity(TileEntityType<?> tileEntityTypeIn) {
super(tileEntityTypeIn);
this.forgeEnergyAdapter = new ForgeEnergyAdapter(this);
this.forgeEnergyAdapterOptional = LazyOptional.of(() -> forgeEnergyAdapter);
// IC2 this.ic2Sink = Integrations.ic2().createPowerSink( this, this );
// IC2 this.ic2Sink.setValidFaces( this.internalPowerSides );
}

protected final Set<Direction> getPowerSides() {
Expand All @@ -74,8 +71,6 @@ protected final Set<Direction> getPowerSides() {

protected void setPowerSides(final Set<Direction> sides) {
this.internalPowerSides = ImmutableSet.copyOf(sides);
// IC2 this.ic2Sink.setValidFaces( sides );
// trigger re-calc!
}

@Override
Expand Down Expand Up @@ -214,27 +209,6 @@ public void setInternalPowerFlow(final AccessRestriction internalPowerFlow) {
this.internalPowerFlow = internalPowerFlow;
}

@Override
public void onReady() {
super.onReady();

// IC2 this.ic2Sink.onLoad();
}

@Override
public void onChunkUnloaded() {
super.onChunkUnloaded();

// IC2 this.ic2Sink.onChunkUnloaded();
}

@Override
public void remove() {
super.remove();

// IC2 this.ic2Sink.invalidate();
}

@SuppressWarnings("unchecked")
@Nonnull
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@
"item.appliedenergistics2.brown_smart_cable": "Brown ME Smart Cable",
"item.appliedenergistics2.brown_smart_dense_cable": "Brown ME Dense Smart Cable",
"item.appliedenergistics2.cable_anchor": "Cable Anchor",
"item.appliedenergistics2.cable_energy_acceptor": "Energy Acceptor",
"item.appliedenergistics2.cable_fluid_interface": "ME Fluid Interface",
"item.appliedenergistics2.cable_interface": "ME Interface",
"item.appliedenergistics2.calculation_processor": "Calculation Processor",
Expand Down
Loading

0 comments on commit dc284e2

Please sign in to comment.