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

Added Magnesium Salt and Magnesium-powered Generator

This commit is contained in:
TheBusyBiscuit 2019-12-17 01:37:09 +01:00
parent 59fb83e871
commit 33adb7e79a
21 changed files with 167 additions and 87 deletions

View File

@ -827,6 +827,9 @@ public final class SlimefunItems {
public static final ItemStack SOULBOUND_ELYTRA = new SlimefunItemStack("SOULBOUND_ELYTRA", ELYTRA, "&cSoulbound Elytra");
public static final ItemStack TOTEM_OF_UNDYING = new ItemStack(Material.TOTEM_OF_UNDYING);
public static final ItemStack MAGNESIUM_SALT = new SlimefunItemStack("MAGNESIUM_SALT", Material.SUGAR, "&cMagnesium Salt", "", "&7A special type of fuel that can be", "&7used in a Magnesium-powered Generator");
public static final ItemStack MAGNESIUM_GENERATOR = new SlimefunItemStack("MAGNESIUM_GENERATOR", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ==", "&cMagnesium-powered Generator", "", MachineTier.MEDIUM.and(MachineType.GENERATOR), "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &736 J/s");
static {
INFUSED_ELYTRA.addUnsafeEnchantment(Enchantment.MENDING, 1);

View File

@ -16,9 +16,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayIt
public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
protected List<ItemStack[]> recipes;
protected List<ItemStack> shownRecipes;
private BlockFace trigger;
protected final List<ItemStack[]> recipes;
protected final List<ItemStack> shownRecipes;
protected final BlockFace trigger;
@Deprecated
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, Material trigger) {
@ -80,20 +80,20 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
@Override
public void install() {
for (ItemStack i: shownRecipes) {
SlimefunItem item = SlimefunItem.getByItem(i);
if (item == null || !SlimefunItem.isDisabled(i)) {
this.recipes.add(new ItemStack[] {i});
for (ItemStack recipeItem : shownRecipes) {
SlimefunItem item = SlimefunItem.getByItem(recipeItem);
if (item == null || !SlimefunItem.isDisabled(recipeItem)) {
this.recipes.add(new ItemStack[] {recipeItem});
}
}
}
private static Material[] convertItemStacksToMaterial(ItemStack[] items) {
List<Material> mats = new ArrayList<>();
for (ItemStack i: items) {
if (i == null) mats.add(null);
else if (i.getType() == Material.FLINT_AND_STEEL) mats.add(Material.FIRE);
else mats.add(i.getType());
for (ItemStack item : items) {
if (item == null) mats.add(null);
else if (item.getType() == Material.FLINT_AND_STEEL) mats.add(Material.FIRE);
else mats.add(item.getType());
}
return mats.toArray(new Material[mats.size()]);

View File

@ -224,8 +224,8 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
}
private MachineFuel findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
for (MachineFuel recipe: recipes) {
for (int slot: getInputSlots()) {
for (MachineFuel recipe : recipes) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimilar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
found.put(slot, recipe.getInput().getAmount());
return recipe;
@ -249,7 +249,7 @@ public abstract class AGenerator extends SlimefunItem implements RecipeDisplayIt
public List<ItemStack> getDisplayRecipes() {
List<ItemStack> list = new ArrayList<>();
for (MachineFuel fuel: recipes) {
for (MachineFuel fuel : recipes) {
ItemStack item = fuel.getInput().clone();
ItemMeta im = item.getItemMeta();
List<String> lore = new ArrayList<>();

View File

@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack;
public class MachineFuel {
private int ticks;
private ItemStack fuel;
private ItemStack output;
private final int ticks;
private final ItemStack fuel;
private final ItemStack output;
public MachineFuel(int seconds, ItemStack fuel) {
this.ticks = seconds * 2;

View File

@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.Nameable;
@ -54,9 +53,11 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
block.setType(e.getItem().getType());
BlockStorage.store(block, sfItem.getID());
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
if (d.getInventory().containsAtLeast(e.getItem(), 2)) {
d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
}
else {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
@ -81,9 +82,11 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
}
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
if (d.getInventory().containsAtLeast(e.getItem(), 2)) {
d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
}
else {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
@ -96,6 +99,6 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
@Override
public void postRegister() {
List<?> list = (List<?>) Slimefun.getItemValue(getID(), "unplaceable-blocks");
blacklist = list.toArray(new String[list.size()]);
blacklist = list.toArray(new String[0]);
}
}

View File

@ -34,12 +34,12 @@ public class Composter extends SlimefunGadget {
private static ItemStack[] getMachineRecipes() {
List<ItemStack> items = new LinkedList<>();
for (Material leave: MaterialCollections.getAllLeaves()) {
for (Material leave : MaterialCollections.getAllLeaves()) {
items.add(new ItemStack(leave, 8));
items.add(new ItemStack(Material.DIRT));
}
for (Material sapling: MaterialCollections.getAllSaplings()) {
for (Material sapling : MaterialCollections.getAllSaplings()) {
items.add(new ItemStack(sapling, 8));
items.add(new ItemStack(Material.DIRT));
}
@ -66,11 +66,11 @@ public class Composter extends SlimefunGadget {
String id = BlockStorage.checkID(e.getClickedBlock());
if (id != null && id.equals(getID())) {
if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, e.getClickedBlock().getLocation(), ProtectableAction.ACCESS_INVENTORIES)) {
final ItemStack input = p.getInventory().getItemInMainHand();
final Block b = e.getClickedBlock();
ItemStack input = p.getInventory().getItemInMainHand();
Block b = e.getClickedBlock();
SlimefunItem machine = SlimefunItem.getByID(id);
for (ItemStack convert: RecipeType.getRecipeInputs(machine)) {
for (ItemStack convert : RecipeType.getRecipeInputs(machine)) {
if (convert != null && SlimefunManager.isItemSimilar(input, convert, true)) {
ItemStack removing = input.clone();
removing.setAmount(convert.getAmount());
@ -79,6 +79,7 @@ public class Composter extends SlimefunGadget {
for (int i = 1; i < 12; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (j < 11) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);

View File

@ -46,12 +46,12 @@ public class Crucible extends SlimefunGadget {
items.add(new ItemStack(Material.OBSIDIAN, 1));
items.add(new ItemStack(Material.LAVA_BUCKET));
for (Material leave: MaterialCollections.getAllLeaves()) {
for (Material leave : MaterialCollections.getAllLeaves()) {
items.add(new ItemStack(leave, 16));
items.add(new ItemStack(Material.WATER_BUCKET));
}
for (Material sapling: MaterialCollections.getAllTerracottaColors()) {
for (Material sapling : MaterialCollections.getAllTerracottaColors()) {
items.add(new ItemStack(sapling, 12));
items.add(new ItemStack(Material.LAVA_BUCKET));
}
@ -70,7 +70,7 @@ public class Crucible extends SlimefunGadget {
final Block block = e.getClickedBlock().getRelative(BlockFace.UP);
SlimefunItem machine = SlimefunItem.getByID(id);
for (ItemStack convert: RecipeType.getRecipeInputs(machine)) {
for (ItemStack convert : RecipeType.getRecipeInputs(machine)) {
if (SlimefunManager.isItemSimilar(input, convert, true)) {
e.setCancelled(true);
@ -85,12 +85,14 @@ public class Crucible extends SlimefunGadget {
level -= 8;
if (level == 0) {
block.getWorld().playSound(block.getLocation(), water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1F, 1F);
} else {
}
else {
int finalLevel = 7 - level;
Slimefun.runSync(() -> runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, finalLevel), 50L);
}
return true;
} else if (block.getType() == (water ? Material.LAVA : Material.WATER)) {
}
else if (block.getType() == (water ? Material.LAVA : Material.WATER)) {
int level = ((Levelled) block.getBlockData()).getLevel();
block.setType(level == 0 || level == 8 ? Material.OBSIDIAN : Material.STONE);
block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F);
@ -136,11 +138,13 @@ public class Crucible extends SlimefunGadget {
block.getWorld().playSound(block.getLocation(), Sound.BLOCK_METAL_BREAK, 1F, 1F);
return;
}
block.getWorld().playSound(block.getLocation(), sound, 1F, 1F);
int level = 8 - times;
Levelled le = (Levelled) block.getBlockData();
le.setLevel(level);
block.setBlockData(le, false);
if (times < 8)
Slimefun.runSync(() -> runPostTask(block, sound, times + 1), 50L);
}

View File

@ -34,7 +34,7 @@ public class InfusedHopper extends SimpleSlimefunItem<BlockTicker> {
return new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem item, Config data) {
public void tick(Block b, SlimefunItem sfItem, Config data) {
if (b.getType() != Material.HOPPER) {
// we're no longer a hopper, we were probably destroyed. skipping this tick.
BlockStorage.clearBlockInfo(b);
@ -44,9 +44,9 @@ public class InfusedHopper extends SimpleSlimefunItem<BlockTicker> {
Location l = b.getLocation().add(0.5, 1.2, 0.5);
boolean sound = false;
for (Entity n: b.getWorld().getNearbyEntities(l, 3.5D, 3.5D, 3.5D, n -> n instanceof Item && n.isValid() && !n.hasMetadata("no_pickup") && n.getLocation().distanceSquared(l) > 0.1)) {
n.setVelocity(new Vector(0, 0.1, 0));
n.teleport(l);
for (Entity item : b.getWorld().getNearbyEntities(l, 3.5D, 3.5D, 3.5D, n -> n instanceof Item && n.isValid() && !n.hasMetadata("no_pickup") && n.getLocation().distanceSquared(l) > 0.1)) {
item.setVelocity(new Vector(0, 0.1, 0));
item.teleport(l);
sound = true;
}

View File

@ -50,7 +50,7 @@ public class ReactorAccessPort extends SlimefunItem {
if (reactor != null) {
menu.replaceExistingItem(INFO_SLOT, new CustomItem(new ItemStack(Material.GREEN_WOOL), "&7Reactor", "", "&6Detected", "", "&7> Click to view Reactor"));
menu.addMenuClickHandler(INFO_SLOT, (p, slot, item, action) -> {
if(reactor != null) {
if (reactor != null) {
reactor.open(p);
}
newInstance(menu, b);

View File

@ -48,7 +48,8 @@ public class TrashCan extends SlimefunItem implements InventoryBlock {
@Override
public void tick(Block b, SlimefunItem item, Config data) {
BlockMenu menu = BlockStorage.getInventory(b);
for (int slot: getInputSlots()) {
for (int slot : getInputSlots()) {
menu.replaceExistingItem(slot, null);
}
}

View File

@ -20,6 +20,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@ -31,10 +32,10 @@ public abstract class ElectricSmeltery extends AContainer {
private static final int[] border_in = {0, 1, 2, 3, 9, 12, 18, 21, 27, 30, 36, 37, 38, 39};
private static final int[] border_out = {14, 15, 16, 17, 23, 26, 32, 33, 34, 35};
public ElectricSmeltery(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
public ElectricSmeltery(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
new BlockMenuPreset(name, getInventoryTitle()) {
new BlockMenuPreset(getID(), getInventoryTitle()) {
@Override
public void init() {
@ -68,7 +69,6 @@ public abstract class ElectricSmeltery extends AContainer {
}
else {
Collections.sort(slots, new RecipeSorter(menu));
int[] array = new int[slots.size()];
for (int i = 0; i < slots.size(); i++) {
@ -80,8 +80,9 @@ public abstract class ElectricSmeltery extends AContainer {
}
};
registerBlockHandler(name, (p, b, tool, reason) -> {
registerBlockHandler(getID(), (p, b, tool, reason) -> {
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot : getInputSlots()) {
if (inv.getItemInSlot(slot) != null) {
@ -89,6 +90,7 @@ public abstract class ElectricSmeltery extends AContainer {
inv.replaceExistingItem(slot, null);
}
}
for (int slot : getOutputSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
@ -96,6 +98,7 @@ public abstract class ElectricSmeltery extends AContainer {
}
}
}
progress.remove(b);
processing.remove(b);
return true;

View File

@ -33,7 +33,7 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem {
public List<ItemStack> getDisplayRecipes() {
List<ItemStack> displayRecipes = new ArrayList<>(recipes.size() * 2);
for (MachineRecipe recipe: recipes) {
for (MachineRecipe recipe : recipes) {
displayRecipes.add(recipe.getInput()[0]);
displayRecipes.add(recipe.getOutput()[recipe.getOutput().length - 1]);
}

View File

@ -61,7 +61,7 @@ public abstract class HeatedPressureChamber extends AContainer {
List<Integer> slots = new ArrayList<>();
for (int slot: getInputSlots()) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimilar(menu.getItemInSlot(slot), item, true)) {
slots.add(slot);
}
@ -72,7 +72,6 @@ public abstract class HeatedPressureChamber extends AContainer {
}
else {
Collections.sort(slots, new RecipeSorter(menu));
int[] array = new int[slots.size()];
for (int i = 0; i < slots.size(); i++) {
@ -94,8 +93,9 @@ public abstract class HeatedPressureChamber extends AContainer {
registerRecipe(30, new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO}, new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2});
registerRecipe(60, new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2, new ItemStack(Material.NETHER_STAR)}, new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3});
registerRecipe(90, new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM}, new ItemStack[] {SlimefunItems.BOOSTED_URANIUM});
registerRecipe(60, new ItemStack[] {SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM}, new ItemStack[]{new CustomItem(SlimefunItems.ENRICHED_NETHER_ICE, 4)});
registerRecipe(45, new ItemStack[] {SlimefunItems.ENRICHED_NETHER_ICE}, new ItemStack[]{new CustomItem(SlimefunItems.NETHER_ICE_COOLANT_CELL, 8)});
registerRecipe(60, new ItemStack[] {SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM}, new ItemStack[] {new CustomItem(SlimefunItems.ENRICHED_NETHER_ICE, 4)});
registerRecipe(45, new ItemStack[] {SlimefunItems.ENRICHED_NETHER_ICE}, new ItemStack[] {new CustomItem(SlimefunItems.NETHER_ICE_COOLANT_CELL, 8)});
registerRecipe(12, new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SALT}, new ItemStack[] {SlimefunItems.MAGNESIUM_SALT});
}
@Override
@ -153,7 +153,7 @@ public abstract class HeatedPressureChamber extends AContainer {
}
else {
menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
pushItems(b, processing.get(b).getOutput());
menu.pushItem(processing.get(b).getOutput()[0], getOutputSlots());
progress.remove(b);
processing.remove(b);
@ -164,9 +164,9 @@ public abstract class HeatedPressureChamber extends AContainer {
MachineRecipe recipe = findRecipe(menu, found);
if (recipe != null) {
if (!fits(b, recipe.getOutput())) return;
if (!menu.fits(recipe.getOutput()[0], getOutputSlots())) return;
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()));
}
@ -177,9 +177,9 @@ public abstract class HeatedPressureChamber extends AContainer {
}
private MachineRecipe findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
for (MachineRecipe recipe: recipes) {
for (ItemStack input: recipe.getInput()) {
for (int slot: getInputSlots()) {
for (MachineRecipe recipe : recipes) {
for (ItemStack input : recipe.getInput()) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimilar(menu.getItemInSlot(slot), input, true)) {
found.put(slot, input.getAmount());
break;

View File

@ -19,6 +19,7 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.utils.MachineHelper;
public abstract class Refinery extends AContainer implements RecipeDisplayItem {
@ -49,32 +50,36 @@ public abstract class Refinery extends AContainer implements RecipeDisplayItem {
@Override
protected void tick(Block b) {
BlockMenu menu = 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(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
ChargableBlock.addCharge(b, -getEnergyConsumption());
progress.put(b, timeleft - 1);
}
else progress.put(b, timeleft - 1);
}
else {
BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
pushItems(b, processing.get(b).getOutput());
menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
menu.pushItem(processing.get(b).getOutput()[0], getOutputSlots());
progress.remove(b);
processing.remove(b);
}
}
else {
for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimilar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.BUCKET_OF_OIL, true)) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimilar(menu.getItemInSlot(slot), SlimefunItems.BUCKET_OF_OIL, true)) {
MachineRecipe r = new MachineRecipe(40, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_FUEL});
if (!fits(b, r.getOutput())) return;
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
if (!menu.fits(SlimefunItems.BUCKET_OF_FUEL, getOutputSlots())) return;
menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
processing.put(b, r);
progress.put(b, r.getTicks());
break;

View File

@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -25,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -40,10 +40,10 @@ public class WitherAssembler extends SlimefunItem {
protected int energyConsumption = 4096;
public WitherAssembler(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
public WitherAssembler(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
new BlockMenuPreset(name, "&5Wither Assembler") {
new BlockMenuPreset(getID(), "&5Wither Assembler") {
@Override
public void init() {
@ -105,7 +105,7 @@ public class WitherAssembler extends SlimefunItem {
}
};
registerBlockHandler(name, new SlimefunBlockHandler() {
registerBlockHandler(getID(), new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
@ -117,13 +117,15 @@ public class WitherAssembler extends SlimefunItem {
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
if (reason == UnregisterReason.EXPLODE) return false;
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot: getSoulSandSlots()) {
for (int slot : getSoulSandSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
inv.replaceExistingItem(slot, null);
}
}
for (int slot : getWitherSkullSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
@ -216,7 +218,8 @@ public class WitherAssembler extends SlimefunItem {
if (soulsand > 3 && skulls > 2) {
for (int slot : getSoulSandSlots()) {
if (SlimefunManager.isItemSimilar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.SOUL_SAND), true)) {
final int amount = BlockStorage.getInventory(b).getItemInSlot(slot).getAmount();
int amount = BlockStorage.getInventory(b).getItemInSlot(slot).getAmount();
if (amount >= soulsand) {
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), soulsand));
break;
@ -230,7 +233,8 @@ public class WitherAssembler extends SlimefunItem {
for (int slot : getWitherSkullSlots()) {
if (SlimefunManager.isItemSimilar(BlockStorage.getInventory(b).getItemInSlot(slot), new ItemStack(Material.WITHER_SKELETON_SKULL), true)) {
final int amount = BlockStorage.getInventory(b).getItemInSlot(slot).getAmount();
int amount = BlockStorage.getInventory(b).getItemInSlot(slot).getAmount();
if (amount >= skulls) {
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), skulls));
break;
@ -243,10 +247,9 @@ public class WitherAssembler extends SlimefunItem {
}
ChargableBlock.addCharge(b, -energyConsumption);
double offset = Double.parseDouble(BlockStorage.getLocationInfo(b.getLocation(), "offset"));
final double offset = Double.parseDouble(BlockStorage.getLocationInfo(b.getLocation(), "offset"));
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> b.getWorld().spawnEntity(new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + offset, b.getZ() + 0.5D), EntityType.WITHER));
Slimefun.runSync(() -> b.getWorld().spawnEntity(new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + offset, b.getZ() + 0.5D), EntityType.WITHER));
}
}
}

View File

@ -47,7 +47,7 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot: getOutputSlots()) {
for (int slot : getOutputSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
inv.replaceExistingItem(slot, null);
@ -70,10 +70,8 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
}
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.PURPLE_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
for (int slot : border) {
preset.addItem(slot, new CustomItem(new ItemStack(Material.PURPLE_STAINED_GLASS_PANE), " "), (p, s, item, action) -> false);
}
}
@ -112,6 +110,7 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
int withdrawn = 0;
BlockMenu menu = BlockStorage.getInventory(b);
for (int level = 0; level < getEXP(b); level = level + 10) {
if (menu.fits(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), getOutputSlots())) {
withdrawn = withdrawn + 10;
@ -124,7 +123,9 @@ public class XPCollector extends SlimefunItem implements InventoryBlock {
private int getEXP(Block b) {
Config cfg = BlockStorage.getLocationInfo(b.getLocation());
if (cfg.contains("stored-exp")) return Integer.parseInt(cfg.getString("stored-exp"));
if (cfg.contains("stored-exp")) {
return Integer.parseInt(cfg.getString("stored-exp"));
}
else {
BlockStorage.addBlockInfo(b, "stored-exp", "0");
return 0;

View File

@ -0,0 +1,34 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public abstract class MagnesiumGenerator extends AGenerator {
public MagnesiumGenerator(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
}
@Override
public void registerDefaultRecipes() {
registerFuel(new MachineFuel(10, SlimefunItems.MAGNESIUM_SALT));
}
@Override
public ItemStack getProgressBar() {
return new ItemStack(Material.FLINT_AND_STEEL);
}
@Override
public String getInventoryTitle() {
return "&cMagnesium-powered Generator";
}
}

View File

@ -55,8 +55,8 @@ public class GrindStone extends MultiBlockMachine {
Dispenser disp = (Dispenser) dispBlock.getState();
Inventory inv = disp.getInventory();
for (ItemStack current: inv.getContents()) {
for (ItemStack convert: RecipeType.getRecipeInputs(this)) {
for (ItemStack current : inv.getContents()) {
for (ItemStack convert : RecipeType.getRecipeInputs(this)) {
if (convert != null && SlimefunManager.isItemSimilar(current, convert, true)) {
ItemStack output = RecipeType.getRecipeOutput(this, convert);
Inventory outputInv = findOutputInventory(output, dispBlock, inv);

View File

@ -1,6 +1,8 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import org.bukkit.Effect;
import org.bukkit.Material;
@ -41,6 +43,11 @@ public class OreWasher extends MultiBlockMachine {
);
}
@Override
public List<ItemStack> getDisplayRecipes() {
return recipes.stream().map(items -> items[0]).collect(Collectors.toList());
}
@Override
public void onInteract(Player p, Block b) {
Block dispBlock = b.getRelative(BlockFace.UP);
@ -48,7 +55,7 @@ public class OreWasher extends MultiBlockMachine {
Inventory inv = disp.getInventory();
ItemStack[] items = SlimefunPlugin.getUtilities().oreWasherOutputs;
for (ItemStack current: inv.getContents()) {
for (ItemStack current : inv.getContents()) {
if (current != null) {
if (SlimefunManager.isItemSimilar(current, SlimefunItems.SIFTED_ORE, true)) {
ItemStack adding = items[new Random().nextInt(items.length)];

View File

@ -248,5 +248,6 @@ public final class ResearchSetup {
Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH);
Slimefun.registerResearch(new Research(251, "Nether Gold Pan", 8), SlimefunItems.NETHER_GOLD_PAN);
Slimefun.registerResearch(new Research(252, "Electric Press", 16), SlimefunItems.ELECTRIC_PRESS, SlimefunItems.ELECTRIC_PRESS_2);
Slimefun.registerResearch(new Research(253, "Power from Magnesium", 20), SlimefunItems.MAGNESIUM_SALT, SlimefunItems.MAGNESIUM_GENERATOR);
}
}

View File

@ -146,6 +146,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generato
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CoalGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.CombustionGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.LavaGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.MagnesiumGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOMiner;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOScannerBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.NetherDrill;
@ -2092,6 +2093,20 @@ public final class SlimefunSetup {
}
}.registerChargeableBlock(true, 1024);
new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.MAGNESIUM_SALT, RecipeType.HEATED_PRESSURE_CHAMBER,
new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SALT, null, null, null, null, null, null, null})
.register(true);
new MagnesiumGenerator(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.MAGNESIUM_GENERATOR, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.COMPRESSED_CARBON, new ItemStack(Material.WATER_BUCKET), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) {
@Override
public int getEnergyProduction() {
return 18;
}
}.registerUnrechargeableBlock(true, 128);
new AutoEnchanter(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.AUTO_ENCHANTER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.ENCHANTING_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN})
@ -2789,7 +2804,7 @@ public final class SlimefunSetup {
.register(true);
new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BLISTERING_INGOT_3, RecipeType.HEATED_PRESSURE_CHAMBER,
new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null})
new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2, new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null})
.register(true);
new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.ENRICHED_NETHER_ICE, RecipeType.HEATED_PRESSURE_CHAMBER,
@ -3225,7 +3240,7 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 512);
new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY, "ELECTRIC_SMELTERY", RecipeType.ENHANCED_CRAFTING_TABLE,
new ElectricSmeltery(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_SMELTERY, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {new ItemStack(Material.NETHER_BRICKS), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICKS), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
@Override
@ -3240,7 +3255,7 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 512);
new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY_2, "ELECTRIC_SMELTERY_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ElectricSmeltery(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.ELECTRIC_SMELTERY_2, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
@Override
@ -3255,10 +3270,9 @@ public final class SlimefunSetup {
}.registerChargeableBlock(true, 1024);
new WitherAssembler(Categories.ELECTRICITY, SlimefunItems.WITHER_ASSEMBLER, "WITHER_ASSEMBLER", RecipeType.ENHANCED_CRAFTING_TABLE,
new WitherAssembler(Categories.ELECTRICITY, (SlimefunItemStack) SlimefunItems.WITHER_ASSEMBLER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR})
.registerChargeableBlock(true, 4096);
}
public static void registerPostHandler(PostSlimefunLoadingHandler handler) {