mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Fixes #2793
This commit is contained in:
parent
e99a39d2ab
commit
6d89d38c3a
@ -30,6 +30,7 @@
|
||||
|
||||
#### Fixes
|
||||
* Fixed #2794
|
||||
* Fixed #2793
|
||||
|
||||
## Release Candidate 20 (30 Jan 2021)
|
||||
|
||||
|
@ -1,8 +1,11 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.items.androids;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Effect;
|
||||
@ -14,9 +17,10 @@ import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.blocks.Vein;
|
||||
import io.github.thebusybiscuit.cscorelib2.materials.MaterialConverter;
|
||||
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
||||
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
@ -59,6 +63,7 @@ public class WoodcutterAndroid extends ProgrammableAndroid {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
private void breakLog(Block log, Block android, BlockMenu menu, BlockFace face) {
|
||||
ItemStack drop = new ItemStack(log.getType());
|
||||
|
||||
@ -67,13 +72,95 @@ public class WoodcutterAndroid extends ProgrammableAndroid {
|
||||
log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType());
|
||||
|
||||
if (log.getY() == android.getRelative(face).getY()) {
|
||||
Optional<Material> sapling = MaterialConverter.getSaplingFromLog(log.getType());
|
||||
|
||||
sapling.ifPresent(log::setType);
|
||||
replant(log);
|
||||
} else {
|
||||
log.setType(Material.AIR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void replant(@Nonnull Block block) {
|
||||
Material logType = block.getType();
|
||||
Material saplingType = null;
|
||||
Predicate<Material> soilRequirement = null;
|
||||
|
||||
switch (logType) {
|
||||
case OAK_LOG:
|
||||
case OAK_WOOD:
|
||||
case STRIPPED_OAK_LOG:
|
||||
case STRIPPED_OAK_WOOD:
|
||||
saplingType = Material.OAK_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
case BIRCH_LOG:
|
||||
case BIRCH_WOOD:
|
||||
case STRIPPED_BIRCH_LOG:
|
||||
case STRIPPED_BIRCH_WOOD:
|
||||
saplingType = Material.BIRCH_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
case JUNGLE_LOG:
|
||||
case JUNGLE_WOOD:
|
||||
case STRIPPED_JUNGLE_LOG:
|
||||
case STRIPPED_JUNGLE_WOOD:
|
||||
saplingType = Material.JUNGLE_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
case SPRUCE_LOG:
|
||||
case SPRUCE_WOOD:
|
||||
case STRIPPED_SPRUCE_LOG:
|
||||
case STRIPPED_SPRUCE_WOOD:
|
||||
saplingType = Material.SPRUCE_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
case ACACIA_LOG:
|
||||
case ACACIA_WOOD:
|
||||
case STRIPPED_ACACIA_LOG:
|
||||
case STRIPPED_ACACIA_WOOD:
|
||||
saplingType = Material.ACACIA_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
case DARK_OAK_LOG:
|
||||
case DARK_OAK_WOOD:
|
||||
case STRIPPED_DARK_OAK_LOG:
|
||||
case STRIPPED_DARK_OAK_WOOD:
|
||||
saplingType = Material.DARK_OAK_SAPLING;
|
||||
soilRequirement = SlimefunTag.DIRT_VARIANTS::isTagged;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_16)) {
|
||||
switch (logType) {
|
||||
case CRIMSON_STEM:
|
||||
case CRIMSON_HYPHAE:
|
||||
case STRIPPED_CRIMSON_STEM:
|
||||
case STRIPPED_CRIMSON_HYPHAE:
|
||||
saplingType = Material.CRIMSON_FUNGUS;
|
||||
soilRequirement = SlimefunTag.FUNGUS_SOIL::isTagged;
|
||||
break;
|
||||
case WARPED_STEM:
|
||||
case WARPED_HYPHAE:
|
||||
case STRIPPED_WARPED_STEM:
|
||||
case STRIPPED_WARPED_HYPHAE:
|
||||
saplingType = Material.WARPED_FUNGUS;
|
||||
soilRequirement = SlimefunTag.FUNGUS_SOIL::isTagged;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (saplingType != null && soilRequirement != null) {
|
||||
if (soilRequirement.test(block.getRelative(BlockFace.DOWN).getType())) {
|
||||
// Replant the block
|
||||
block.setType(saplingType);
|
||||
} else {
|
||||
// Simply drop the sapling if the soil does not fit
|
||||
block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(saplingType));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -120,6 +120,12 @@ public enum SlimefunTag implements Tag<Material> {
|
||||
*/
|
||||
DIRT_VARIANTS,
|
||||
|
||||
/**
|
||||
* All soil blocks for a fungus to grow on.
|
||||
* This includes all dirt variants, nylium and soul soil.
|
||||
*/
|
||||
FUNGUS_SOIL,
|
||||
|
||||
/**
|
||||
* All variants of concrete powder.
|
||||
* Can you believe there is no tag for this already?
|
||||
|
17
src/main/resources/tags/fungus_soil.json
Normal file
17
src/main/resources/tags/fungus_soil.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"values" : [
|
||||
"#slimefun:dirt_variants",
|
||||
{
|
||||
"id" : "minecraft:soul_soil",
|
||||
"required" : false
|
||||
},
|
||||
{
|
||||
"id" : "minecraft:crimson_nylium",
|
||||
"required" : false
|
||||
},
|
||||
{
|
||||
"id" : "minecraft:warped_nylium",
|
||||
"required" : false
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user