1
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:
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) {
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);

View File

@ -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);

View File

@ -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));
}
}

View File

@ -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() {

View File

@ -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);

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.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;
}
}
}
}

View File

@ -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()));
}
}
}
}