mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
fix geo miner voiding resources
This commit is contained in:
parent
7da1af0383
commit
f60896f620
@ -57,4 +57,10 @@ public interface MachineOperation {
|
||||
return getRemainingTicks() <= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when a {@link MachineOperation} is interrupted before finishing.
|
||||
* Implement to specify behaviour that should happen in this case.
|
||||
*/
|
||||
default void cancel() {}
|
||||
|
||||
}
|
||||
|
@ -6,7 +6,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
@ -46,7 +47,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* The owner of this {@link MachineProcessor}.
|
||||
*/
|
||||
public MachineProcessor(@Nonnull MachineProcessHolder<T> owner) {
|
||||
Validate.notNull(owner, "The MachineProcessHolder cannot be null.");
|
||||
Preconditions.checkArgument(owner != null, "The MachineProcessHolder cannot be null.");
|
||||
|
||||
this.owner = owner;
|
||||
}
|
||||
@ -93,8 +94,8 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} has already been started at that {@link Location}.
|
||||
*/
|
||||
public boolean startOperation(@Nonnull Location loc, @Nonnull T operation) {
|
||||
Validate.notNull(loc, "The location must not be null");
|
||||
Validate.notNull(operation, "The operation cannot be null");
|
||||
Preconditions.checkArgument(loc != null, "The location must not be null");
|
||||
Preconditions.checkArgument(operation != null, "The operation cannot be null");
|
||||
|
||||
return startOperation(new BlockPosition(loc), operation);
|
||||
}
|
||||
@ -111,8 +112,8 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} has already been started at that {@link Block}.
|
||||
*/
|
||||
public boolean startOperation(@Nonnull Block b, @Nonnull T operation) {
|
||||
Validate.notNull(b, "The Block must not be null");
|
||||
Validate.notNull(operation, "The machine operation cannot be null");
|
||||
Preconditions.checkArgument(b != null, "The Block must not be null");
|
||||
Preconditions.checkArgument(operation != null, "The machine operation cannot be null");
|
||||
|
||||
return startOperation(new BlockPosition(b), operation);
|
||||
}
|
||||
@ -129,8 +130,8 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} has already been started at that {@link BlockPosition}.
|
||||
*/
|
||||
public boolean startOperation(@Nonnull BlockPosition pos, @Nonnull T operation) {
|
||||
Validate.notNull(pos, "The BlockPosition must not be null");
|
||||
Validate.notNull(operation, "The machine operation cannot be null");
|
||||
Preconditions.checkArgument(pos != null, "The BlockPosition must not be null");
|
||||
Preconditions.checkArgument(operation != null, "The machine operation cannot be null");
|
||||
|
||||
return machines.putIfAbsent(pos, operation) == null;
|
||||
}
|
||||
@ -144,7 +145,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* @return The current {@link MachineOperation} or null.
|
||||
*/
|
||||
public @Nullable T getOperation(@Nonnull Location loc) {
|
||||
Validate.notNull(loc, "The location cannot be null");
|
||||
Preconditions.checkArgument(loc != null, "The location cannot be null");
|
||||
|
||||
return getOperation(new BlockPosition(loc));
|
||||
}
|
||||
@ -158,15 +159,13 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* @return The current {@link MachineOperation} or null.
|
||||
*/
|
||||
public @Nullable T getOperation(@Nonnull Block b) {
|
||||
Validate.notNull(b, "The Block cannot be null");
|
||||
Preconditions.checkArgument(b != null, "The Block cannot be null");
|
||||
|
||||
return getOperation(new BlockPosition(b));
|
||||
}
|
||||
|
||||
/**
|
||||
* This returns the current {@link MachineOperation} at that given {@link BlockPosition}.
|
||||
* We don't need to validate our input here as that is already
|
||||
* covered in our public methods.
|
||||
*
|
||||
* @param pos
|
||||
* The {@link BlockPosition} at which our machine is located.
|
||||
@ -174,7 +173,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* @return The current {@link MachineOperation} or null.
|
||||
*/
|
||||
public @Nullable T getOperation(@Nonnull BlockPosition pos) {
|
||||
Validate.notNull(pos, "The BlockPosition must not be null");
|
||||
Preconditions.checkArgument(pos != null, "The BlockPosition must not be null");
|
||||
|
||||
return machines.get(pos);
|
||||
}
|
||||
@ -189,7 +188,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} to begin with.
|
||||
*/
|
||||
public boolean endOperation(@Nonnull Location loc) {
|
||||
Validate.notNull(loc, "The location should not be null");
|
||||
Preconditions.checkArgument(loc != null, "The location should not be null");
|
||||
|
||||
return endOperation(new BlockPosition(loc));
|
||||
}
|
||||
@ -204,7 +203,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} to begin with.
|
||||
*/
|
||||
public boolean endOperation(@Nonnull Block b) {
|
||||
Validate.notNull(b, "The Block should not be null");
|
||||
Preconditions.checkArgument(b != null, "The Block should not be null");
|
||||
|
||||
return endOperation(new BlockPosition(b));
|
||||
}
|
||||
@ -219,7 +218,7 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
* {@link MachineOperation} to begin with.
|
||||
*/
|
||||
public boolean endOperation(@Nonnull BlockPosition pos) {
|
||||
Validate.notNull(pos, "The BlockPosition cannot be null");
|
||||
Preconditions.checkArgument(pos != null, "The BlockPosition cannot be null");
|
||||
|
||||
T operation = machines.remove(pos);
|
||||
|
||||
@ -231,6 +230,8 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
if (operation.isFinished()) {
|
||||
Event event = new AsyncMachineOperationFinishEvent(pos, this, operation);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
} else {
|
||||
operation.cancel();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -240,8 +241,8 @@ public class MachineProcessor<T extends MachineOperation> {
|
||||
}
|
||||
|
||||
public void updateProgressBar(@Nonnull BlockMenu inv, int slot, @Nonnull T operation) {
|
||||
Validate.notNull(inv, "The inventory must not be null.");
|
||||
Validate.notNull(operation, "The MachineOperation must not be null.");
|
||||
Preconditions.checkArgument(inv != null, "The inventory must not be null.");
|
||||
Preconditions.checkArgument(operation != null, "The MachineOperation must not be null.");
|
||||
|
||||
if (getProgressBar() == null) {
|
||||
// No progress bar, no need to update anything.
|
||||
|
@ -7,7 +7,8 @@ import java.util.OptionalInt;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -77,7 +78,7 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
}
|
||||
|
||||
@Override
|
||||
public MachineProcessor<MiningOperation> getMachineProcessor() {
|
||||
public @Nonnull MachineProcessor<MiningOperation> getMachineProcessor() {
|
||||
return processor;
|
||||
}
|
||||
|
||||
@ -121,8 +122,8 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
*
|
||||
* @return This method will return the current instance of {@link GEOMiner}, so that can be chained.
|
||||
*/
|
||||
public final GEOMiner setCapacity(int capacity) {
|
||||
Validate.isTrue(capacity > 0, "The capacity must be greater than zero!");
|
||||
public final @Nonnull GEOMiner setCapacity(int capacity) {
|
||||
Preconditions.checkArgument(capacity > 0, "The capacity must be greater than zero!");
|
||||
|
||||
if (getState() == ItemState.UNREGISTERED) {
|
||||
this.energyCapacity = capacity;
|
||||
@ -140,8 +141,8 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
*
|
||||
* @return This method will return the current instance of {@link GEOMiner}, so that can be chained.
|
||||
*/
|
||||
public final GEOMiner setProcessingSpeed(int speed) {
|
||||
Validate.isTrue(speed > 0, "The speed must be greater than zero!");
|
||||
public final @Nonnull GEOMiner setProcessingSpeed(int speed) {
|
||||
Preconditions.checkArgument(speed > 0, "The speed must be greater than zero!");
|
||||
|
||||
this.processingSpeed = speed;
|
||||
return this;
|
||||
@ -155,10 +156,10 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
*
|
||||
* @return This method will return the current instance of {@link GEOMiner}, so that can be chained.
|
||||
*/
|
||||
public final GEOMiner setEnergyConsumption(int energyConsumption) {
|
||||
Validate.isTrue(energyConsumption > 0, "The energy consumption must be greater than zero!");
|
||||
Validate.isTrue(energyCapacity > 0, "You must specify the capacity before you can set the consumption amount.");
|
||||
Validate.isTrue(energyConsumption <= energyCapacity, "The energy consumption cannot be higher than the capacity (" + energyCapacity + ')');
|
||||
public final @Nonnull GEOMiner setEnergyConsumption(int energyConsumption) {
|
||||
Preconditions.checkArgument(energyConsumption > 0, "The energy consumption must be greater than zero!");
|
||||
Preconditions.checkArgument(energyCapacity > 0, "You must specify the capacity before you can set the consumption amount.");
|
||||
Preconditions.checkArgument(energyConsumption <= energyCapacity, "The energy consumption cannot be higher than the capacity (" + energyCapacity + ')');
|
||||
|
||||
this.energyConsumedPerTick = energyConsumption;
|
||||
return this;
|
||||
@ -188,19 +189,17 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private BlockPlaceHandler onBlockPlace() {
|
||||
private @Nonnull BlockPlaceHandler onBlockPlace() {
|
||||
return new BlockPlaceHandler(false) {
|
||||
|
||||
@Override
|
||||
public void onPlayerPlace(BlockPlaceEvent e) {
|
||||
public void onPlayerPlace(@Nonnull BlockPlaceEvent e) {
|
||||
updateHologram(e.getBlock(), "&7Idling...");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private BlockBreakHandler onBlockBreak() {
|
||||
private @Nonnull BlockBreakHandler onBlockBreak() {
|
||||
return new SimpleBlockBreakHandler() {
|
||||
|
||||
@Override
|
||||
@ -217,21 +216,18 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
};
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public int[] getInputSlots() {
|
||||
public @Nonnull int[] getInputSlots() {
|
||||
return new int[0];
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public int[] getOutputSlots() {
|
||||
public @Nonnull int[] getOutputSlots() {
|
||||
return OUTPUT_SLOTS;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public List<ItemStack> getDisplayRecipes() {
|
||||
public @Nonnull List<ItemStack> getDisplayRecipes() {
|
||||
List<ItemStack> displayRecipes = new LinkedList<>();
|
||||
|
||||
for (GEOResource resource : Slimefun.getRegistry().getGEOResources().values()) {
|
||||
@ -249,7 +245,7 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnergyNetComponentType getEnergyComponentType() {
|
||||
public @Nonnull EnergyNetComponentType getEnergyComponentType() {
|
||||
return EnergyNetComponentType.CONSUMER;
|
||||
}
|
||||
|
||||
@ -274,7 +270,7 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
|
||||
@Override
|
||||
public boolean onClick(InventoryClickEvent e, Player p, int slot, ItemStack cursor, ClickAction action) {
|
||||
return cursor == null || cursor.getType() == null || cursor.getType() == Material.AIR;
|
||||
return cursor == null || cursor.getType() == Material.AIR;
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -328,7 +324,7 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
if (resource.isObtainableFromGEOMiner()) {
|
||||
OptionalInt optional = Slimefun.getGPSNetwork().getResourceManager().getSupplies(resource, b.getWorld(), b.getX() >> 4, b.getZ() >> 4);
|
||||
|
||||
if (!optional.isPresent()) {
|
||||
if (optional.isEmpty()) {
|
||||
updateHologram(b, "&4GEO-Scan required!");
|
||||
return;
|
||||
}
|
||||
@ -339,7 +335,7 @@ public class GEOMiner extends SlimefunItem implements RecipeDisplayItem, EnergyN
|
||||
return;
|
||||
}
|
||||
|
||||
processor.startOperation(b, new MiningOperation(resource.getItem().clone(), PROCESSING_TIME));
|
||||
processor.startOperation(b, new MiningOperation(resource, b, PROCESSING_TIME));
|
||||
Slimefun.getGPSNetwork().getResourceManager().setSupplies(resource, b.getWorld(), b.getX() >> 4, b.getZ() >> 4, supplies - 1);
|
||||
updateHologram(b, "&7Mining: &r" + resource.getName());
|
||||
return;
|
||||
|
@ -1,12 +1,18 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.operations;
|
||||
|
||||
import java.util.OptionalInt;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.geo.GEOResource;
|
||||
import io.github.thebusybiscuit.slimefun4.api.geo.ResourceManager;
|
||||
import io.github.thebusybiscuit.slimefun4.core.machines.MachineOperation;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.items.geo.GEOMiner;
|
||||
|
||||
/**
|
||||
@ -22,20 +28,24 @@ public class MiningOperation implements MachineOperation {
|
||||
|
||||
private final ItemStack result;
|
||||
|
||||
private final GEOResource resource;
|
||||
private final Block block;
|
||||
private final int totalTicks;
|
||||
private int currentTicks = 0;
|
||||
|
||||
public MiningOperation(@Nonnull ItemStack result, int totalTicks) {
|
||||
Validate.notNull(result, "The result cannot be null");
|
||||
Validate.isTrue(totalTicks >= 0, "The amount of total ticks must be a positive integer or zero, received: " + totalTicks);
|
||||
public MiningOperation(@Nonnull GEOResource resource, Block block, int totalTicks) {
|
||||
Preconditions.checkArgument(resource != null, "The resource cannot be null");
|
||||
Preconditions.checkArgument(totalTicks >= 0, "The amount of total ticks must be a positive integer or zero, received: " + totalTicks);
|
||||
|
||||
this.result = result;
|
||||
this.resource = resource;
|
||||
this.result = resource.getItem().clone();
|
||||
this.block = block;
|
||||
this.totalTicks = totalTicks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addProgress(int num) {
|
||||
Validate.isTrue(num > 0, "Progress must be positive.");
|
||||
Preconditions.checkArgument(num > 0, "Progress must be positive.");
|
||||
currentTicks += num;
|
||||
}
|
||||
|
||||
@ -59,4 +69,11 @@ public class MiningOperation implements MachineOperation {
|
||||
return totalTicks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
ResourceManager resourceManager = Slimefun.getGPSNetwork().getResourceManager();
|
||||
OptionalInt supplies = resourceManager.getSupplies(resource, block.getWorld(), block.getX() >> 4, block.getZ() >> 4);
|
||||
supplies.ifPresent(s -> resourceManager.setSupplies(resource, block.getWorld(), block.getX() >> 4, block.getZ() >> 4, s + 1));
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user