This repository has been archived by the owner on Jun 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add forge energy Pretty much exact from YarnForge, with formatting changes * Fix license * Update fabric.mod.json * Move energy to patchwork-capabilities * Remove patchwork-energy
- Loading branch information
Showing
3 changed files
with
232 additions
and
0 deletions.
There are no files selected for viewing
55 changes: 55 additions & 0 deletions
55
patchwork-capabilities/src/main/java/net/minecraftforge/energy/CapabilityEnergy.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* Minecraft Forge, Patchwork Project | ||
* Copyright (c) 2016-2020, 2019-2020 | ||
* | ||
* This library 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 version 2.1 | ||
* of the License. | ||
* | ||
* This library 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 this library; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
package net.minecraftforge.energy; | ||
|
||
import net.minecraftforge.common.capabilities.Capability; | ||
import net.minecraftforge.common.capabilities.Capability.IStorage; | ||
import net.minecraftforge.common.capabilities.CapabilityInject; | ||
import net.minecraftforge.common.capabilities.CapabilityManager; | ||
|
||
import net.minecraft.nbt.IntTag; | ||
import net.minecraft.nbt.Tag; | ||
import net.minecraft.util.math.Direction; | ||
|
||
public class CapabilityEnergy { | ||
@CapabilityInject(IEnergyStorage.class) | ||
public static Capability<IEnergyStorage> ENERGY = null; | ||
|
||
public static void register() { | ||
CapabilityManager.INSTANCE.register(IEnergyStorage.class, new IStorage<IEnergyStorage>() { | ||
@Override | ||
public Tag writeNBT(Capability<IEnergyStorage> capability, IEnergyStorage instance, Direction side) { | ||
return new IntTag(instance.getEnergyStored()); | ||
} | ||
|
||
@Override | ||
public void readNBT(Capability<IEnergyStorage> capability, IEnergyStorage instance, Direction side, Tag nbt) { | ||
if (!(instance instanceof EnergyStorage)) { | ||
throw new IllegalArgumentException("Can not deserialize to an instance that isn't the default implementation"); | ||
} | ||
|
||
((EnergyStorage) instance).energy = ((IntTag) nbt).getInt(); | ||
} | ||
}, | ||
() -> new EnergyStorage(1000) | ||
); | ||
} | ||
} | ||
|
103 changes: 103 additions & 0 deletions
103
patchwork-capabilities/src/main/java/net/minecraftforge/energy/EnergyStorage.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* Minecraft Forge, Patchwork Project | ||
* Copyright (c) 2016-2020, 2019-2020 | ||
* | ||
* This library 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 version 2.1 | ||
* of the License. | ||
* | ||
* This library 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 this library; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
package net.minecraftforge.energy; | ||
|
||
/** | ||
* <p>Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own.</p> | ||
* | ||
* <p>Derived from the Redstone Flux power system designed by King Lemming and originally utilized in Thermal Expansion and related mods. | ||
* Created with consent and permission of King Lemming and Team CoFH. Released with permission under LGPL 2.1 when bundled with Forge.</p> | ||
*/ | ||
public class EnergyStorage implements IEnergyStorage { | ||
protected int energy; | ||
protected int capacity; | ||
protected int maxReceive; | ||
protected int maxExtract; | ||
|
||
public EnergyStorage(int capacity) { | ||
this(capacity, capacity, capacity, 0); | ||
} | ||
|
||
public EnergyStorage(int capacity, int maxTransfer) { | ||
this(capacity, maxTransfer, maxTransfer, 0); | ||
} | ||
|
||
public EnergyStorage(int capacity, int maxReceive, int maxExtract) { | ||
this(capacity, maxReceive, maxExtract, 0); | ||
} | ||
|
||
public EnergyStorage(int capacity, int maxReceive, int maxExtract, int energy) { | ||
this.capacity = capacity; | ||
this.maxReceive = maxReceive; | ||
this.maxExtract = maxExtract; | ||
this.energy = Math.max(0, Math.min(capacity, energy)); | ||
} | ||
|
||
@Override | ||
public int receiveEnergy(int maxReceive, boolean simulate) { | ||
if (!canReceive()) { | ||
return 0; | ||
} | ||
|
||
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); | ||
|
||
if (!simulate) { | ||
energy += energyReceived; | ||
} | ||
|
||
return energyReceived; | ||
} | ||
|
||
@Override | ||
public int extractEnergy(int maxExtract, boolean simulate) { | ||
if (!canExtract()) { | ||
return 0; | ||
} | ||
|
||
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); | ||
|
||
if (!simulate) { | ||
energy -= energyExtracted; | ||
} | ||
|
||
return energyExtracted; | ||
} | ||
|
||
@Override | ||
public int getEnergyStored() { | ||
return energy; | ||
} | ||
|
||
@Override | ||
public int getMaxEnergyStored() { | ||
return capacity; | ||
} | ||
|
||
@Override | ||
public boolean canExtract() { | ||
return this.maxExtract > 0; | ||
} | ||
|
||
@Override | ||
public boolean canReceive() { | ||
return this.maxReceive > 0; | ||
} | ||
} | ||
|
74 changes: 74 additions & 0 deletions
74
patchwork-capabilities/src/main/java/net/minecraftforge/energy/IEnergyStorage.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/* | ||
* Minecraft Forge, Patchwork Project | ||
* Copyright (c) 2016-2020, 2019-2020 | ||
* | ||
* This library 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 version 2.1 | ||
* of the License. | ||
* | ||
* This library 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 this library; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
package net.minecraftforge.energy; | ||
|
||
/** | ||
* <p>An energy storage is the unit of interaction with Energy inventories.</p> | ||
* | ||
* <p>A reference implementation can be found at {@link EnergyStorage}.</p> | ||
* | ||
* <p>Derived from the Redstone Flux power system designed by King Lemming and originally utilized in Thermal Expansion and related mods. | ||
* Created with consent and permission of King Lemming and Team CoFH. Released with permission under LGPL 2.1 when bundled with Forge.</p> | ||
*/ | ||
public interface IEnergyStorage { | ||
/** | ||
* Adds energy to the storage. Returns quantity of energy that was accepted. | ||
* | ||
* @param maxReceive | ||
* Maximum amount of energy to be inserted. | ||
* @param simulate | ||
* If TRUE, the insertion will only be simulated. | ||
* @return Amount of energy that was (or would have been, if simulated) accepted by the storage. | ||
*/ | ||
int receiveEnergy(int maxReceive, boolean simulate); | ||
|
||
/** | ||
* Removes energy from the storage. Returns quantity of energy that was removed. | ||
* | ||
* @param maxExtract | ||
* Maximum amount of energy to be extracted. | ||
* @param simulate | ||
* If TRUE, the extraction will only be simulated. | ||
* @return Amount of energy that was (or would have been, if simulated) extracted from the storage. | ||
*/ | ||
int extractEnergy(int maxExtract, boolean simulate); | ||
|
||
/** | ||
* Returns the amount of energy currently stored. | ||
*/ | ||
int getEnergyStored(); | ||
|
||
/** | ||
* Returns the maximum amount of energy that can be stored. | ||
*/ | ||
int getMaxEnergyStored(); | ||
|
||
/** | ||
* Returns if this storage can have energy extracted. | ||
* If this is false, then any calls to extractEnergy will return 0. | ||
*/ | ||
boolean canExtract(); | ||
|
||
/** | ||
* Used to determine if this storage can receive energy. | ||
* If this is false, then any calls to receiveEnergy will return 0. | ||
*/ | ||
boolean canReceive(); | ||
} |