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:
parent
f62bdf92c0
commit
d3b3fd15bd
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
@ -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);
|
||||||
@ -60,10 +61,12 @@ 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);
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
@ -103,4 +105,25 @@ 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user