mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Reworked Energy Providers (Generators)
This commit is contained in:
parent
0735eaad83
commit
c574337318
@ -22,6 +22,10 @@
|
||||
|
||||
## Release Candidate 15 (TBD)
|
||||
|
||||
#### Changes
|
||||
* Refactored and reworked the Generator API
|
||||
* Small performance improvements to Energy networks
|
||||
|
||||
## Release Candidate 14 (12 Jul 2020)
|
||||
|
||||
#### Additions
|
||||
|
@ -17,6 +17,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||
@ -115,7 +116,7 @@ public class ErrorReport {
|
||||
stream.println();
|
||||
}
|
||||
|
||||
if (item.getEnergyTicker() != null) {
|
||||
if (item instanceof EnergyNetProvider) {
|
||||
stream.println("Ticker-Info:");
|
||||
stream.println(" Type: Indirect (Energy Network)");
|
||||
stream.println();
|
||||
|
@ -0,0 +1,62 @@
|
||||
package io.github.thebusybiscuit.slimefun4.core.attributes;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNet;
|
||||
import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.electric.AbstractEnergyProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
|
||||
|
||||
/**
|
||||
* An {@link EnergyNetProvider} is an extension of {@link EnergyNetComponent} which provides
|
||||
* energy to an {@link EnergyNet}.
|
||||
* It must be implemented on any Generator or {@link Reactor}.
|
||||
*
|
||||
* @author TheBusyBiscuit
|
||||
*
|
||||
* @see EnergyNet
|
||||
* @see EnergyNetComponent
|
||||
* @see AbstractEnergyProvider
|
||||
* @see AGenerator
|
||||
* @see Reactor
|
||||
*
|
||||
*/
|
||||
public interface EnergyNetProvider extends EnergyNetComponent {
|
||||
|
||||
@Override
|
||||
default EnergyNetComponentType getEnergyComponentType() {
|
||||
return EnergyNetComponentType.GENERATOR;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns how much energy this {@link EnergyNetProvider} provides to the {@link EnergyNet}.
|
||||
* We call this method on every tick, so make sure to keep it light and fast.
|
||||
* Stored energy does not have to be handled in here.
|
||||
*
|
||||
* @param l
|
||||
* The {@link Location} of this {@link EnergyNetProvider}
|
||||
* @param data
|
||||
* The stored block data
|
||||
*
|
||||
* @return The generated output energy of this {@link EnergyNetProvider}.
|
||||
*/
|
||||
int getGeneratedOutput(Location l, Config data);
|
||||
|
||||
/**
|
||||
* This method returns whether the given {@link Location} is going to explode on the
|
||||
* next tick.
|
||||
*
|
||||
* @param l
|
||||
* The {@link Location} of this {@link EnergyNetProvider}
|
||||
* @param data
|
||||
* The stored block data
|
||||
*
|
||||
* @return Whether or not this {@link Location} will explode.
|
||||
*/
|
||||
default boolean willExplode(Location l, Config data) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -15,6 +15,7 @@ import io.github.thebusybiscuit.slimefun4.api.ErrorReport;
|
||||
import io.github.thebusybiscuit.slimefun4.api.network.Network;
|
||||
import io.github.thebusybiscuit.slimefun4.api.network.NetworkComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor;
|
||||
@ -143,10 +144,9 @@ public class EnergyNet extends Network {
|
||||
SimpleHologram.update(b, "&4No Energy Network found");
|
||||
}
|
||||
else {
|
||||
double supply = DoubleHandler.fixDouble(tickAllGenerators(timestamp::getAndAdd) + tickAllCapacitors());
|
||||
double demand = 0;
|
||||
|
||||
int availableEnergy = (int) supply;
|
||||
int supply = tickAllGenerators(timestamp::getAndAdd) + tickAllCapacitors();
|
||||
int remainingEnergy = supply;
|
||||
int demand = 0;
|
||||
|
||||
for (Location machine : consumers) {
|
||||
int capacity = ChargableBlock.getMaxCharge(machine);
|
||||
@ -156,20 +156,20 @@ public class EnergyNet extends Network {
|
||||
int availableSpace = capacity - charge;
|
||||
demand += availableSpace;
|
||||
|
||||
if (availableEnergy > 0) {
|
||||
if (availableEnergy > availableSpace) {
|
||||
if (remainingEnergy > 0) {
|
||||
if (remainingEnergy > availableSpace) {
|
||||
ChargableBlock.setUnsafeCharge(machine, capacity, false);
|
||||
availableEnergy -= availableSpace;
|
||||
remainingEnergy -= availableSpace;
|
||||
}
|
||||
else {
|
||||
ChargableBlock.setUnsafeCharge(machine, charge + availableEnergy, false);
|
||||
availableEnergy = 0;
|
||||
ChargableBlock.setUnsafeCharge(machine, charge + remainingEnergy, false);
|
||||
remainingEnergy = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storeExcessEnergy(availableEnergy);
|
||||
storeExcessEnergy(remainingEnergy);
|
||||
updateHologram(b, supply, demand);
|
||||
}
|
||||
|
||||
@ -217,8 +217,8 @@ public class EnergyNet extends Network {
|
||||
}
|
||||
}
|
||||
|
||||
private double tickAllGenerators(LongConsumer timeCallback) {
|
||||
double supply = 0;
|
||||
private int tickAllGenerators(LongConsumer timeCallback) {
|
||||
int supply = 0;
|
||||
Set<Location> exploded = new HashSet<>();
|
||||
|
||||
for (Location source : generators) {
|
||||
@ -226,8 +226,46 @@ public class EnergyNet extends Network {
|
||||
Config config = BlockStorage.getLocationInfo(source);
|
||||
SlimefunItem item = SlimefunItem.getByID(config.getString("id"));
|
||||
|
||||
if (item != null) {
|
||||
if (item instanceof EnergyNetProvider) {
|
||||
try {
|
||||
EnergyNetProvider generator = (EnergyNetProvider) item;
|
||||
int energy = generator.getGeneratedOutput(source, config);
|
||||
|
||||
if (generator.getCapacity() > 0) {
|
||||
String charge = config.getString("energy-charge");
|
||||
|
||||
if (charge != null) {
|
||||
energy += Integer.parseInt(charge);
|
||||
}
|
||||
}
|
||||
|
||||
if (generator.willExplode(source, config)) {
|
||||
exploded.add(source);
|
||||
BlockStorage.clearBlockInfo(source);
|
||||
Reactor.processing.remove(source);
|
||||
Reactor.progress.remove(source);
|
||||
|
||||
Slimefun.runSync(() -> {
|
||||
source.getBlock().setType(Material.LAVA);
|
||||
source.getWorld().createExplosion(source, 0F, false);
|
||||
});
|
||||
}
|
||||
else {
|
||||
supply += energy;
|
||||
}
|
||||
}
|
||||
catch (Exception | LinkageError t) {
|
||||
exploded.add(source);
|
||||
new ErrorReport(t, source, item);
|
||||
}
|
||||
|
||||
long time = SlimefunPlugin.getProfiler().closeEntry(source, item, timestamp);
|
||||
timeCallback.accept(time);
|
||||
}
|
||||
else if (item != null) {
|
||||
try {
|
||||
// This will be removed very very soon
|
||||
// It is only here for backwards compatibility
|
||||
GeneratorTicker generator = item.getEnergyTicker();
|
||||
|
||||
if (generator != null) {
|
||||
@ -267,12 +305,11 @@ public class EnergyNet extends Network {
|
||||
}
|
||||
|
||||
generators.removeAll(exploded);
|
||||
|
||||
return supply;
|
||||
}
|
||||
|
||||
private double tickAllCapacitors() {
|
||||
double supply = 0;
|
||||
private int tickAllCapacitors() {
|
||||
int supply = 0;
|
||||
|
||||
for (Location capacitor : storage) {
|
||||
supply += ChargableBlock.getCharge(capacitor);
|
||||
|
@ -5,17 +5,19 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
|
||||
import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.RecipeDisplayItem;
|
||||
import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.NumberUtils;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
@ -34,7 +36,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
* @see Reactor
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractEnergyProvider extends SlimefunItem implements InventoryBlock, RecipeDisplayItem, EnergyNetComponent {
|
||||
public abstract class AbstractEnergyProvider extends SlimefunItem implements InventoryBlock, RecipeDisplayItem, EnergyNetProvider {
|
||||
|
||||
protected final Set<MachineFuel> fuelTypes = new HashSet<>();
|
||||
|
||||
@ -79,13 +81,48 @@ public abstract class AbstractEnergyProvider extends SlimefunItem implements Inv
|
||||
return EnergyNetComponentType.GENERATOR;
|
||||
}
|
||||
|
||||
protected abstract GeneratorTicker onTick();
|
||||
/**
|
||||
* @deprecated Please implement the methods
|
||||
* {@link #getGeneratedOutput(org.bukkit.Location, me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config)}
|
||||
* and {@link #willExplode(org.bukkit.Location, me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config)}
|
||||
* instead
|
||||
*
|
||||
* @return A {@link GeneratorTicker}
|
||||
*/
|
||||
@Deprecated
|
||||
protected GeneratorTicker onTick() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGeneratedOutput(Location l, Config data) {
|
||||
if (generatorTicker != null) {
|
||||
return (int) generatorTicker.generateEnergy(l, this, data);
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean willExplode(Location l, Config data) {
|
||||
if (generatorTicker != null) {
|
||||
return generatorTicker.explode(l);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preRegister() {
|
||||
super.preRegister();
|
||||
|
||||
addItemHandler(onTick());
|
||||
GeneratorTicker ticker = onTick();
|
||||
|
||||
if (ticker != null) {
|
||||
addItemHandler(ticker);
|
||||
}
|
||||
}
|
||||
|
||||
public void registerFuel(MachineFuel fuel) {
|
||||
|
@ -6,23 +6,25 @@ import org.bukkit.World.Environment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler;
|
||||
import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.GeneratorTicker;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
|
||||
public abstract class SolarGenerator extends SimpleSlimefunItem<GeneratorTicker> implements EnergyNetComponent {
|
||||
public class SolarGenerator extends SlimefunItem implements EnergyNetProvider {
|
||||
|
||||
private static final int DEFAULT_NIGHT_ENERGY = 0;
|
||||
private final int dayEnergy;
|
||||
private final int nightEnergy;
|
||||
|
||||
public SolarGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||
public SolarGenerator(Category category, int dayEnergy, int nightEnergy, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, recipeType, recipe);
|
||||
|
||||
this.dayEnergy = dayEnergy;
|
||||
this.nightEnergy = nightEnergy;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -31,19 +33,18 @@ public abstract class SolarGenerator extends SimpleSlimefunItem<GeneratorTicker>
|
||||
*
|
||||
* @return The amount of energy generated at daylight
|
||||
*/
|
||||
public abstract double getDayEnergy();
|
||||
public int getDayEnergy() {
|
||||
return dayEnergy;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the amount of energy that this {@link SolarGenerator}
|
||||
* produces during the night.
|
||||
*
|
||||
* This is 0 by default.
|
||||
*
|
||||
* @return The amount of energy generated at night time
|
||||
*/
|
||||
public double getNightEnergy() {
|
||||
// Override this as necessary for highly advanced Solar Generators
|
||||
return DEFAULT_NIGHT_ENERGY;
|
||||
public int getNightEnergy() {
|
||||
return nightEnergy;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -57,11 +58,7 @@ public abstract class SolarGenerator extends SimpleSlimefunItem<GeneratorTicker>
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratorTicker getItemHandler() {
|
||||
return new GeneratorTicker() {
|
||||
|
||||
@Override
|
||||
public double generateEnergy(Location l, SlimefunItem item, Config data) {
|
||||
public int getGeneratedOutput(Location l, Config data) {
|
||||
World world = l.getWorld();
|
||||
|
||||
if (world.getEnvironment() != Environment.NORMAL) {
|
||||
@ -86,13 +83,6 @@ public abstract class SolarGenerator extends SimpleSlimefunItem<GeneratorTicker>
|
||||
return getNightEnergy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean explode(Location l) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns whether a given {@link World} has daytime.
|
||||
* It will also return false if a thunderstorm is active in this world.
|
||||
|
@ -29,14 +29,11 @@ import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.GeneratorTicker;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||
@ -49,7 +46,7 @@ import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||
* @author AlexLander123
|
||||
* @author TheBusyBiscuit
|
||||
*
|
||||
* @see AGenerator
|
||||
* @see AGeneratoro
|
||||
* @see NuclearReactor
|
||||
* @see NetherStarReactor
|
||||
*
|
||||
@ -72,6 +69,8 @@ public abstract class Reactor extends AbstractEnergyProvider {
|
||||
// No coolant border
|
||||
private static final int[] border_4 = { 25, 34, 43 };
|
||||
|
||||
private final Set<Location> explosionsQueue = new HashSet<>();
|
||||
|
||||
public Reactor(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, recipeType, recipe);
|
||||
|
||||
@ -261,16 +260,9 @@ public abstract class Reactor extends AbstractEnergyProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GeneratorTicker onTick() {
|
||||
return new GeneratorTicker() {
|
||||
|
||||
private final Set<Location> explosionsQueue = new HashSet<>();
|
||||
|
||||
@Override
|
||||
public double generateEnergy(Location l, SlimefunItem sf, Config data) {
|
||||
public int getGeneratedOutput(Location l, Config data) {
|
||||
BlockMenu inv = BlockStorage.getInventory(l);
|
||||
BlockMenu accessPort = getAccessPort(l);
|
||||
int charge = ChargableBlock.getCharge(l);
|
||||
|
||||
if (isProcessing(l)) {
|
||||
extraTick(l);
|
||||
@ -278,6 +270,12 @@ public abstract class Reactor extends AbstractEnergyProvider {
|
||||
|
||||
if (timeleft > 0) {
|
||||
int produced = getEnergyProduction();
|
||||
int charge = 0;
|
||||
|
||||
if (data.contains("energy-charge")) {
|
||||
charge = Integer.parseInt(data.getString("energy-charge"));
|
||||
}
|
||||
|
||||
int space = getCapacity() - charge;
|
||||
|
||||
if (space >= produced || !ReactorMode.GENERATOR.toString().equals(BlockStorage.getLocationInfo(l, MODE))) {
|
||||
@ -293,26 +291,25 @@ public abstract class Reactor extends AbstractEnergyProvider {
|
||||
}
|
||||
|
||||
if (space >= produced) {
|
||||
ChargableBlock.addCharge(l, getEnergyProduction());
|
||||
return (double) (charge + getEnergyProduction());
|
||||
return getEnergyProduction();
|
||||
}
|
||||
else {
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
createByproduct(l, inv, accessPort);
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
burnNextFuel(l, inv, accessPort);
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean explode(Location l) {
|
||||
public boolean willExplode(Location l, Config data) {
|
||||
boolean explosion = explosionsQueue.contains(l);
|
||||
|
||||
if (explosion) {
|
||||
@ -343,8 +340,6 @@ public abstract class Reactor extends AbstractEnergyProvider {
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void createByproduct(Location l, BlockMenu inv, BlockMenu accessPort) {
|
||||
inv.replaceExistingItem(22, new CustomItem(Material.BLACK_STAINED_GLASS_PANE, " "));
|
||||
|
@ -1495,50 +1495,21 @@ public final class SlimefunItemSetup {
|
||||
new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO, new ItemStack(Material.REDSTONE), SlimefunItems.LARGE_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO})
|
||||
.register(plugin);
|
||||
|
||||
new SolarGenerator(categories.electricity, SlimefunItems.SOLAR_GENERATOR, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null}) {
|
||||
new SolarGenerator(categories.electricity, 2, 0, SlimefunItems.SOLAR_GENERATOR, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null})
|
||||
.register(plugin);
|
||||
|
||||
@Override
|
||||
public double getDayEnergy() {
|
||||
return 2;
|
||||
}
|
||||
new SolarGenerator(categories.electricity, 8, 0, SlimefunItems.SOLAR_GENERATOR_2, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR})
|
||||
.register(plugin);
|
||||
|
||||
}.register(plugin);
|
||||
new SolarGenerator(categories.electricity, 32, 0, SlimefunItems.SOLAR_GENERATOR_3, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2})
|
||||
.register(plugin);
|
||||
|
||||
new SolarGenerator(categories.electricity, SlimefunItems.SOLAR_GENERATOR_2, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR}) {
|
||||
|
||||
@Override
|
||||
public double getDayEnergy() {
|
||||
return 8;
|
||||
}
|
||||
|
||||
}.register(plugin);
|
||||
|
||||
new SolarGenerator(categories.electricity, SlimefunItems.SOLAR_GENERATOR_3, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2}) {
|
||||
|
||||
@Override
|
||||
public double getDayEnergy() {
|
||||
return 32;
|
||||
}
|
||||
|
||||
}.register(plugin);
|
||||
|
||||
new SolarGenerator(categories.electricity, SlimefunItems.SOLAR_GENERATOR_4, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3}) {
|
||||
|
||||
@Override
|
||||
public double getDayEnergy() {
|
||||
return 128;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getNightEnergy() {
|
||||
return 64;
|
||||
}
|
||||
|
||||
}.register(plugin);
|
||||
new SolarGenerator(categories.electricity, 128, 64, SlimefunItems.SOLAR_GENERATOR_4, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3})
|
||||
.register(plugin);
|
||||
|
||||
new ChargingBench(categories.electricity, SlimefunItems.CHARGING_BENCH, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.CRAFTING_TABLE), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null})
|
||||
|
@ -28,6 +28,7 @@ import io.github.thebusybiscuit.slimefun4.api.exceptions.WrongItemStackException
|
||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
|
||||
import io.github.thebusybiscuit.slimefun4.api.items.ItemState;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.Placeable;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.Radioactive;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.Rechargeable;
|
||||
@ -74,7 +75,7 @@ public class SlimefunItem implements Placeable {
|
||||
|
||||
private boolean ticking = false;
|
||||
private BlockTicker blockTicker;
|
||||
private GeneratorTicker generatorTicker;
|
||||
protected GeneratorTicker generatorTicker;
|
||||
|
||||
/**
|
||||
* This creates a new {@link SlimefunItem} from the given arguments.
|
||||
@ -320,7 +321,11 @@ public class SlimefunItem implements Placeable {
|
||||
return blockTicker;
|
||||
}
|
||||
|
||||
// We should maybe refactor this and move it to a subclass
|
||||
/**
|
||||
* @deprecated The interface {@link EnergyNetProvider} should be implemented instead
|
||||
* @return A {@link GeneratorTicker}
|
||||
*/
|
||||
@Deprecated
|
||||
public GeneratorTicker getEnergyTicker() {
|
||||
return generatorTicker;
|
||||
}
|
||||
|
@ -23,8 +23,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenu
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.GeneratorTicker;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
@ -58,8 +56,12 @@ public abstract class AGenerator extends AbstractEnergyProvider {
|
||||
|
||||
@Override
|
||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||||
if (flow == ItemTransportFlow.INSERT) return getInputSlots();
|
||||
else return getOutputSlots();
|
||||
if (flow == ItemTransportFlow.INSERT) {
|
||||
return getInputSlots();
|
||||
}
|
||||
else {
|
||||
return getOutputSlots();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -138,14 +140,9 @@ public abstract class AGenerator extends AbstractEnergyProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GeneratorTicker onTick() {
|
||||
return new GeneratorTicker() {
|
||||
|
||||
@Override
|
||||
public double generateEnergy(Location l, SlimefunItem sf, Config data) {
|
||||
public int getGeneratedOutput(Location l, Config data) {
|
||||
BlockMenu inv = BlockStorage.getInventory(l);
|
||||
boolean chargeable = getCapacity() > 0;
|
||||
int charge = chargeable ? ChargableBlock.getCharge(l) : 0;
|
||||
|
||||
if (isProcessing(l)) {
|
||||
int timeleft = progress.get(l);
|
||||
@ -154,13 +151,14 @@ public abstract class AGenerator extends AbstractEnergyProvider {
|
||||
ChestMenuUtils.updateProgressbar(inv, 22, timeleft, processing.get(l).getTicks(), getProgressBar());
|
||||
|
||||
if (chargeable) {
|
||||
int charge = ChargableBlock.getCharge(l);
|
||||
|
||||
if (getCapacity() - charge >= getEnergyProduction()) {
|
||||
ChargableBlock.addCharge(l, getEnergyProduction());
|
||||
progress.put(l, timeleft - 1);
|
||||
return (double) (charge + getEnergyProduction());
|
||||
return getEnergyProduction();
|
||||
}
|
||||
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
progress.put(l, timeleft - 1);
|
||||
@ -178,7 +176,7 @@ public abstract class AGenerator extends AbstractEnergyProvider {
|
||||
|
||||
progress.remove(l);
|
||||
processing.remove(l);
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -194,17 +192,10 @@ public abstract class AGenerator extends AbstractEnergyProvider {
|
||||
progress.put(l, fuel.getTicks());
|
||||
}
|
||||
|
||||
return charge;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean explode(Location l) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private boolean isBucket(ItemStack item) {
|
||||
if (item == null) {
|
||||
return false;
|
||||
|
@ -6,11 +6,17 @@ import org.bukkit.Location;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.exceptions.IncompatibleItemHandlerException;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider;
|
||||
import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable;
|
||||
import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
|
||||
/**
|
||||
* @deprecated Please implement the {@link EnergyNetProvider} interface instead.
|
||||
*
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class GeneratorTicker implements ItemHandler {
|
||||
|
||||
public abstract double generateEnergy(Location l, SlimefunItem item, Config data);
|
||||
|
Loading…
Reference in New Issue
Block a user