mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Very small performance optimizations
This commit is contained in:
parent
f62bdf92c0
commit
d3b3fd15bd
@ -171,10 +171,12 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
}
|
||||
|
||||
protected void tick(Block b) {
|
||||
BlockMenu inv = BlockStorage.getInventory(b);
|
||||
|
||||
if (isProcessing(b)) {
|
||||
int timeleft = progress.get(b);
|
||||
if (timeleft > 0) {
|
||||
MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||
MachineHelper.updateProgressbar(inv, 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||
|
||||
if (ChargableBlock.isChargable(b)) {
|
||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||
@ -184,7 +186,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
else progress.put(b, timeleft - 1);
|
||||
}
|
||||
else {
|
||||
BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
inv.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
pushItems(b, processing.get(b).getOutput().clone());
|
||||
|
||||
progress.remove(b);
|
||||
@ -198,7 +200,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
for (MachineRecipe recipe: recipes) {
|
||||
for (ItemStack input: recipe.getInput()) {
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
||||
if (SlimefunManager.isItemSimiliar(inv.getItemInSlot(slot), input, true)) {
|
||||
found.put(slot, input.getAmount());
|
||||
break;
|
||||
}
|
||||
@ -215,7 +217,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
|
||||
if (!fits(b, r.getOutput())) return;
|
||||
|
||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
||||
inv.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(inv.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||
}
|
||||
|
||||
processing.put(b, r);
|
||||
|
@ -97,7 +97,7 @@ public abstract class AFarm extends SlimefunItem {
|
||||
public abstract int getEnergyConsumption();
|
||||
public abstract boolean canHarvest(Block b);
|
||||
public abstract ItemStack harvest(Block b);
|
||||
public abstract int getSize();
|
||||
public abstract int getRadius();
|
||||
|
||||
public int[] getOutputSlots() {
|
||||
return new int[] {19, 20, 21, 22, 23, 24, 25};
|
||||
@ -106,10 +106,10 @@ public abstract class AFarm extends SlimefunItem {
|
||||
protected void tick(Block b) {
|
||||
if (ChargableBlock.isChargable(b)) {
|
||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||
int i = getSize() / 2;
|
||||
int radius = getRadius();
|
||||
|
||||
for (int x = -i; x <= i; x++) {
|
||||
for (int z = -i; z <= i; z++) {
|
||||
for (int x = -radius; x <= radius; x++) {
|
||||
for (int z = -radius; z <= radius; z++) {
|
||||
Block block = new Location(b.getWorld(), b.getX() + (double) x, b.getY() + 2.0, b.getZ() + (double) z).getBlock();
|
||||
if (canHarvest(block)) {
|
||||
ItemStack item = harvest(block);
|
||||
|
@ -164,10 +164,11 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
|
||||
|
||||
@Override
|
||||
public double generateEnergy(Location l, SlimefunItem sf, Config data) {
|
||||
BlockMenu inv = BlockStorage.getInventory(l);
|
||||
if (isProcessing(l)) {
|
||||
int timeleft = progress.get(l);
|
||||
if (timeleft > 0) {
|
||||
MachineHelper.updateProgressbar(BlockStorage.getInventory(l), 22, timeleft, processing.get(l).getTicks(), getProgressBar());
|
||||
MachineHelper.updateProgressbar(inv, 22, timeleft, processing.get(l).getTicks(), getProgressBar());
|
||||
|
||||
if (ChargableBlock.isChargable(l)) {
|
||||
if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) {
|
||||
@ -187,9 +188,9 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
|
||||
if (SlimefunManager.isItemSimiliar(fuel, new ItemStack(Material.LAVA_BUCKET), true)
|
||||
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true)
|
||||
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_OIL, true)) {
|
||||
pushItems(l, new ItemStack(Material.BUCKET));
|
||||
pushItems(inv, new ItemStack(Material.BUCKET));
|
||||
}
|
||||
BlockStorage.getInventory(l).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
inv.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
|
||||
progress.remove(l);
|
||||
processing.remove(l);
|
||||
@ -197,13 +198,12 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
|
||||
}
|
||||
}
|
||||
else {
|
||||
BlockMenu menu = BlockStorage.getInventory(l);
|
||||
Map<Integer, Integer> found = new HashMap<>();
|
||||
MachineFuel fuel = findRecipe(menu, found);
|
||||
MachineFuel fuel = findRecipe(inv, found);
|
||||
|
||||
if (fuel != null) {
|
||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||
inv.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(inv.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||
}
|
||||
|
||||
processing.put(l, fuel);
|
||||
@ -237,24 +237,24 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
|
||||
return this.recipes;
|
||||
}
|
||||
|
||||
private Inventory inject(Location l) {
|
||||
int size = BlockStorage.getInventory(l).toInventory().getSize();
|
||||
private Inventory inject(BlockMenu menu) {
|
||||
int size = menu.toInventory().getSize();
|
||||
Inventory inv = Bukkit.createInventory(null, size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
|
||||
}
|
||||
for (int slot: getOutputSlots()) {
|
||||
inv.setItem(slot, BlockStorage.getInventory(l).getItemInSlot(slot));
|
||||
inv.setItem(slot, menu.getItemInSlot(slot));
|
||||
}
|
||||
return inv;
|
||||
}
|
||||
|
||||
protected void pushItems(Location l, ItemStack... items) {
|
||||
Inventory inv = inject(l);
|
||||
protected void pushItems(BlockMenu menu, ItemStack... items) {
|
||||
Inventory inv = inject(menu);
|
||||
inv.addItem(items);
|
||||
|
||||
for (int slot : getOutputSlots()) {
|
||||
BlockStorage.getInventory(l).replaceExistingItem(slot, inv.getItem(slot));
|
||||
menu.replaceExistingItem(slot, inv.getItem(slot));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,13 +211,9 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem
|
||||
}
|
||||
|
||||
public abstract String getInventoryTitle();
|
||||
|
||||
public abstract void registerDefaultRecipes();
|
||||
|
||||
public abstract int getEnergyProduction();
|
||||
|
||||
public abstract void extraTick(Location l);
|
||||
|
||||
public abstract ItemStack getCoolant();
|
||||
|
||||
public boolean needsCooling() {
|
||||
|
@ -44,6 +44,7 @@ public interface InventoryBlock {
|
||||
};
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
default Inventory inject(Block b) {
|
||||
int size = getOutputSlots().length;
|
||||
Inventory inv = Bukkit.createInventory(null, ((int) Math.ceil(size / 9F)) * 9);
|
||||
@ -59,11 +60,13 @@ public interface InventoryBlock {
|
||||
|
||||
return inv;
|
||||
}
|
||||
|
||||
|
||||
@Deprecated
|
||||
default boolean fits(Block b, ItemStack... items) {
|
||||
return inject(b).addItem(items).isEmpty();
|
||||
}
|
||||
|
||||
|
||||
@Deprecated
|
||||
default void pushItems(Block b, ItemStack... items) {
|
||||
Inventory inv = inject(b);
|
||||
inv.addItem(items);
|
||||
|
@ -9,6 +9,7 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
@ -18,6 +19,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
|
||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
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;
|
||||
import me.mrCookieSlime.Slimefun.utils.MachineHelper;
|
||||
@ -72,10 +74,12 @@ public abstract class OilPump extends AContainer {
|
||||
|
||||
@Override
|
||||
protected void tick(Block b) {
|
||||
BlockMenu inv = BlockStorage.getInventory(b);
|
||||
|
||||
if (isProcessing(b)) {
|
||||
int timeleft = progress.get(b);
|
||||
if (timeleft > 0) {
|
||||
MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||
MachineHelper.updateProgressbar(inv, 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||
|
||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||||
@ -83,23 +87,27 @@ public abstract class OilPump extends AContainer {
|
||||
progress.put(b, timeleft - 1);
|
||||
}
|
||||
else {
|
||||
BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
inv.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||
pushItems(b, processing.get(b).getOutput());
|
||||
|
||||
progress.remove(b);
|
||||
processing.remove(b);
|
||||
}
|
||||
}
|
||||
else if (OreGenSystem.getSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), false) > 0) {
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
|
||||
MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL});
|
||||
if (!fits(b, r.getOutput())) return;
|
||||
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
|
||||
processing.put(b, r);
|
||||
progress.put(b, r.getTicks());
|
||||
OreGenSystem.setSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), OreGenSystem.getSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), false) - 1);
|
||||
break;
|
||||
else {
|
||||
OreGenResource oil = OreGenSystem.getResource("Oil");
|
||||
int supplies = OreGenSystem.getSupplies(oil, b.getChunk(), false);
|
||||
if (supplies > 0) {
|
||||
for (int slot: getInputSlots()) {
|
||||
if (SlimefunManager.isItemSimiliar(inv.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
|
||||
MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL});
|
||||
if (!fits(b, r.getOutput())) return;
|
||||
inv.replaceExistingItem(slot, InvUtils.decreaseItem(inv.getItemInSlot(slot), 1));
|
||||
processing.put(b, r);
|
||||
progress.put(b, r.getTicks());
|
||||
OreGenSystem.setSupplies(oil, b.getChunk(), supplies - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils;
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||
|
||||
public final class MachineHelper {
|
||||
@ -102,5 +104,26 @@ public final class MachineHelper {
|
||||
|
||||
menu.replaceExistingItem(slot, item);
|
||||
}
|
||||
|
||||
public static boolean fits(BlockMenu menu, ItemStack item, int... slots) {
|
||||
return InvUtils.fits(menu.toInventory(), item, slots);
|
||||
}
|
||||
|
||||
public static void pushItems(BlockMenu menu, ItemStack item, int... slots) {
|
||||
int amount = item.getAmount();
|
||||
for (int slot: slots) {
|
||||
if (amount <= 0) break;
|
||||
|
||||
ItemStack stack = menu.getItemInSlot(slot);
|
||||
if (stack == null) {
|
||||
menu.replaceExistingItem(slot, item);
|
||||
return;
|
||||
}
|
||||
else if (stack.getAmount() < stack.getMaxStackSize() && ItemUtils.canStack(item, stack)) {
|
||||
amount -= (stack.getMaxStackSize() - stack.getAmount());
|
||||
stack.setAmount(Math.min(stack.getAmount() + item.getAmount(), stack.getMaxStackSize()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user