1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Very small performance optimizations

This commit is contained in:
TheBusyBiscuit 2019-10-13 13:24:14 +02:00
parent f62bdf92c0
commit d3b3fd15bd
7 changed files with 70 additions and 38 deletions

View File

@ -171,10 +171,12 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
} }
protected void tick(Block b) { protected void tick(Block b) {
BlockMenu inv = BlockStorage.getInventory(b);
if (isProcessing(b)) { if (isProcessing(b)) {
int timeleft = progress.get(b); int timeleft = progress.get(b);
if (timeleft > 0) { 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.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; 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 progress.put(b, timeleft - 1);
} }
else { 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()); pushItems(b, processing.get(b).getOutput().clone());
progress.remove(b); progress.remove(b);
@ -198,7 +200,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
for (MachineRecipe recipe: recipes) { for (MachineRecipe recipe: recipes) {
for (ItemStack input: recipe.getInput()) { for (ItemStack input: recipe.getInput()) {
for (int slot: getInputSlots()) { 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()); found.put(slot, input.getAmount());
break; break;
} }
@ -215,7 +217,7 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock
if (!fits(b, r.getOutput())) return; if (!fits(b, r.getOutput())) return;
for (Map.Entry<Integer, Integer> entry: found.entrySet()) { 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); processing.put(b, r);

View File

@ -97,7 +97,7 @@ public abstract class AFarm extends SlimefunItem {
public abstract int getEnergyConsumption(); public abstract int getEnergyConsumption();
public abstract boolean canHarvest(Block b); public abstract boolean canHarvest(Block b);
public abstract ItemStack harvest(Block b); public abstract ItemStack harvest(Block b);
public abstract int getSize(); public abstract int getRadius();
public int[] getOutputSlots() { public int[] getOutputSlots() {
return new int[] {19, 20, 21, 22, 23, 24, 25}; 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) { protected void tick(Block b) {
if (ChargableBlock.isChargable(b)) { if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return; if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
int i = getSize() / 2; int radius = getRadius();
for (int x = -i; x <= i; x++) { for (int x = -radius; x <= radius; x++) {
for (int z = -i; z <= i; z++) { 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(); Block block = new Location(b.getWorld(), b.getX() + (double) x, b.getY() + 2.0, b.getZ() + (double) z).getBlock();
if (canHarvest(block)) { if (canHarvest(block)) {
ItemStack item = harvest(block); ItemStack item = harvest(block);

View File

@ -164,10 +164,11 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
@Override @Override
public double generateEnergy(Location l, SlimefunItem sf, Config data) { public double generateEnergy(Location l, SlimefunItem sf, Config data) {
BlockMenu inv = BlockStorage.getInventory(l);
if (isProcessing(l)) { if (isProcessing(l)) {
int timeleft = progress.get(l); int timeleft = progress.get(l);
if (timeleft > 0) { 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.isChargable(l)) {
if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) { 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) if (SlimefunManager.isItemSimiliar(fuel, new ItemStack(Material.LAVA_BUCKET), true)
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true) || SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true)
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_OIL, 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); progress.remove(l);
processing.remove(l); processing.remove(l);
@ -197,13 +198,12 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
} }
} }
else { else {
BlockMenu menu = BlockStorage.getInventory(l);
Map<Integer, Integer> found = new HashMap<>(); Map<Integer, Integer> found = new HashMap<>();
MachineFuel fuel = findRecipe(menu, found); MachineFuel fuel = findRecipe(inv, found);
if (fuel != null) { if (fuel != null) {
for (Map.Entry<Integer, Integer> entry: found.entrySet()) { 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); processing.put(l, fuel);
@ -237,24 +237,24 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
return this.recipes; return this.recipes;
} }
private Inventory inject(Location l) { private Inventory inject(BlockMenu menu) {
int size = BlockStorage.getInventory(l).toInventory().getSize(); int size = menu.toInventory().getSize();
Inventory inv = Bukkit.createInventory(null, size); Inventory inv = Bukkit.createInventory(null, size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US")); inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
} }
for (int slot: getOutputSlots()) { for (int slot: getOutputSlots()) {
inv.setItem(slot, BlockStorage.getInventory(l).getItemInSlot(slot)); inv.setItem(slot, menu.getItemInSlot(slot));
} }
return inv; return inv;
} }
protected void pushItems(Location l, ItemStack... items) { protected void pushItems(BlockMenu menu, ItemStack... items) {
Inventory inv = inject(l); Inventory inv = inject(menu);
inv.addItem(items); inv.addItem(items);
for (int slot : getOutputSlots()) { for (int slot : getOutputSlots()) {
BlockStorage.getInventory(l).replaceExistingItem(slot, inv.getItem(slot)); menu.replaceExistingItem(slot, inv.getItem(slot));
} }
} }

View File

@ -211,13 +211,9 @@ public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem
} }
public abstract String getInventoryTitle(); public abstract String getInventoryTitle();
public abstract void registerDefaultRecipes(); public abstract void registerDefaultRecipes();
public abstract int getEnergyProduction(); public abstract int getEnergyProduction();
public abstract void extraTick(Location l); public abstract void extraTick(Location l);
public abstract ItemStack getCoolant(); public abstract ItemStack getCoolant();
public boolean needsCooling() { public boolean needsCooling() {

View File

@ -44,6 +44,7 @@ public interface InventoryBlock {
}; };
} }
@Deprecated
default Inventory inject(Block b) { default Inventory inject(Block b) {
int size = getOutputSlots().length; int size = getOutputSlots().length;
Inventory inv = Bukkit.createInventory(null, ((int) Math.ceil(size / 9F)) * 9); Inventory inv = Bukkit.createInventory(null, ((int) Math.ceil(size / 9F)) * 9);
@ -59,11 +60,13 @@ public interface InventoryBlock {
return inv; return inv;
} }
@Deprecated
default boolean fits(Block b, ItemStack... items) { default boolean fits(Block b, ItemStack... items) {
return inject(b).addItem(items).isEmpty(); return inject(b).addItem(items).isEmpty();
} }
@Deprecated
default void pushItems(Block b, ItemStack... items) { default void pushItems(Block b, ItemStack... items) {
Inventory inv = inject(b); Inventory inv = inject(b);
inv.addItem(items); inv.addItem(items);

View File

@ -9,6 +9,7 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; 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.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; 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.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.utils.MachineHelper; import me.mrCookieSlime.Slimefun.utils.MachineHelper;
@ -72,10 +74,12 @@ public abstract class OilPump extends AContainer {
@Override @Override
protected void tick(Block b) { protected void tick(Block b) {
BlockMenu inv = BlockStorage.getInventory(b);
if (isProcessing(b)) { if (isProcessing(b)) {
int timeleft = progress.get(b); int timeleft = progress.get(b);
if (timeleft > 0) { 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; if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
ChargableBlock.addCharge(b, -getEnergyConsumption()); ChargableBlock.addCharge(b, -getEnergyConsumption());
@ -83,23 +87,27 @@ public abstract class OilPump extends AContainer {
progress.put(b, timeleft - 1); progress.put(b, timeleft - 1);
} }
else { 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()); pushItems(b, processing.get(b).getOutput());
progress.remove(b); progress.remove(b);
processing.remove(b); processing.remove(b);
} }
} }
else if (OreGenSystem.getSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), false) > 0) { else {
for (int slot: getInputSlots()) { OreGenResource oil = OreGenSystem.getResource("Oil");
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) { int supplies = OreGenSystem.getSupplies(oil, b.getChunk(), false);
MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL}); if (supplies > 0) {
if (!fits(b, r.getOutput())) return; for (int slot: getInputSlots()) {
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1)); if (SlimefunManager.isItemSimiliar(inv.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
processing.put(b, r); MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL});
progress.put(b, r.getTicks()); if (!fits(b, r.getOutput())) return;
OreGenSystem.setSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), OreGenSystem.getSupplies(OreGenSystem.getResource("Oil"), b.getChunk(), false) - 1); inv.replaceExistingItem(slot, InvUtils.decreaseItem(inv.getItemInSlot(slot), 1));
break; processing.put(b, r);
progress.put(b, r.getTicks());
OreGenSystem.setSupplies(oil, b.getChunk(), supplies - 1);
break;
}
} }
} }
} }

View File

@ -9,6 +9,8 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta; 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; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public final class MachineHelper { public final class MachineHelper {
@ -102,5 +104,26 @@ public final class MachineHelper {
menu.replaceExistingItem(slot, item); 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()));
}
}
}
} }