1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Fixes #2877 and added a new config option to crucibles

This commit is contained in:
TheBusyBiscuit 2021-03-10 14:04:33 +01:00
parent 86edb0df6a
commit 4678de1697
3 changed files with 44 additions and 10 deletions

View File

@ -26,6 +26,7 @@
#### Additions
* Nether Wart Blocks can now be turned into Nether Warts using a Grind Stone
* Added an option to allow Talismans to send their notifications via the Actionbar
* Added an option to enable/disable water in the nether via a crucible
* /sf versions now shows the Java version and some useful tooltips
#### Changes
@ -53,6 +54,7 @@
* Fixed #2861
* Fixed #2856
* Fixed #2876
* Fixed #2877
## Release Candidate 20 (30 Jan 2021)

View File

@ -8,8 +8,10 @@ import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.Sound;
import org.bukkit.Tag;
import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.Levelled;
@ -19,6 +21,7 @@ import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting;
import io.github.thebusybiscuit.slimefun4.core.attributes.RecipeDisplayItem;
import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
@ -30,14 +33,26 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
/**
* The {@link Crucible} is a machine which turns blocks into liquids.
* It is a very reliable source of lava and water.
* The liquids will accumulate over time above the machine.
*
* @author TheBusyBiscuit
* @author Sfiguz7
*
*/
public class Crucible extends SimpleSlimefunItem<BlockUseHandler> implements RecipeDisplayItem {
private final ItemSetting<Boolean> allowWaterInNether = new ItemSetting<>("allow-water-in-nether", false);
private final List<ItemStack> recipes;
@ParametersAreNonnullByDefault
public Crucible(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe);
recipes = getMachineRecipes();
addItemSetting(allowWaterInNether);
}
@Override
@ -45,6 +60,7 @@ public class Crucible extends SimpleSlimefunItem<BlockUseHandler> implements Rec
return recipes;
}
@Nonnull
private List<ItemStack> getMachineRecipes() {
List<ItemStack> items = new LinkedList<>();
@ -113,11 +129,11 @@ public class Crucible extends SimpleSlimefunItem<BlockUseHandler> implements Rec
@ParametersAreNonnullByDefault
private boolean craft(Player p, ItemStack input) {
for (int i = 0; i < recipes.size(); i += 2) {
ItemStack convert = recipes.get(i);
ItemStack catalyst = recipes.get(i);
if (SlimefunUtils.isItemSimilar(input, convert, true)) {
if (SlimefunUtils.isItemSimilar(input, catalyst, true)) {
ItemStack removing = input.clone();
removing.setAmount(convert.getAmount());
removing.setAmount(catalyst.getAmount());
p.getInventory().removeItem(removing);
return true;
@ -127,15 +143,31 @@ public class Crucible extends SimpleSlimefunItem<BlockUseHandler> implements Rec
return false;
}
private void generateLiquid(@Nonnull Block block, boolean water) {
if (block.getType() == (water ? Material.WATER : Material.LAVA)) {
addLiquidLevel(block, water);
} else if (block.getType() == (water ? Material.LAVA : Material.WATER)) {
/**
* This method starts the process of generating liquids.
*
* @param block
* The {@link Block} where to generate the liquid
* @param isWater
* Whether we generate water or lava.
*/
private void generateLiquid(@Nonnull Block block, boolean isWater) {
// Fixes #2877 - If water in the nether is disabled, abort and play an effect.
if (isWater && block.getWorld().getEnvironment() == Environment.NETHER && !allowWaterInNether.getValue()) {
// We will still consume the items but won't generate water in the Nether.
block.getWorld().spawnParticle(Particle.SMOKE_NORMAL, block.getLocation().add(0.5, 0.5, 0.5), 4);
block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F);
return;
}
if (block.getType() == (isWater ? Material.WATER : Material.LAVA)) {
addLiquidLevel(block, isWater);
} else if (block.getType() == (isWater ? 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);
} else {
SlimefunPlugin.runSync(() -> placeLiquid(block, water), 50L);
SlimefunPlugin.runSync(() -> placeLiquid(block, isWater), 50L);
}
}

View File

@ -16,10 +16,10 @@ import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
/**
*
* @deprecated This interface is not designed to be used by addons.
* @deprecated This interface is not designed to be used by addons. The entire inventory system will be replaced
* eventually.
*
*/
@Deprecated
public interface InventoryBlock {
/**