!Fixed an issue with skulls and drops

This commit is contained in:
Indyuce 2020-04-04 16:20:58 +02:00
parent 4e189ac6e4
commit 19ad204814
6 changed files with 34 additions and 4 deletions

View File

@ -7,6 +7,7 @@ import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
import net.Indyuce.mmocore.api.util.MMOCoreUtils;
import net.mmogroup.mmolib.MMOLib;
import net.mmogroup.mmolib.api.MMOLineConfig;
import net.mmogroup.mmolib.version.VersionMaterial;
public class SkullBlockType implements BlockType {
private final String value;
@ -27,9 +28,10 @@ public class SkullBlockType implements BlockType {
@Override
public void place(Location loc, RegeneratingBlock block) {
loc.getBlock().setType(VersionMaterial.PLAYER_HEAD.toMaterial());
// save skull orientation if replaced block is a player head
if (MMOCoreUtils.isPlayerHead(loc.getBlock().getType()) && MMOLib.plugin.getVersion().isStrictlyHigher(1, 12))
if (MMOCoreUtils.isPlayerHead(block.getBlockData().getMaterial()) && MMOLib.plugin.getVersion().isStrictlyHigher(1, 12))
loc.getBlock().setBlockData(block.getBlockData());
MMOLib.plugin.getNMS().setSkullValue(loc.getBlock(), value);

View File

@ -151,9 +151,12 @@ public class DefaultMMOLoader extends MMOLoader {
@Override
public BlockType loadBlockType(MMOLineConfig config) {
if (config.getKey().equalsIgnoreCase("vanilla"))
return new VanillaBlockType(config);
if (config.getKey().equalsIgnoreCase("skull") || config.getKey().equals("head") || config.getKey().equals("playerhead"))
return new SkullBlockType(config);
return new VanillaBlockType(config);
return null;
}
}

View File

@ -48,6 +48,7 @@ public class BlockListener implements Listener {
event.setCancelled(true);
return;
}
/*
* calls the event and listen for cancel & for drops changes... also
* allows to apply tool durability & enchants to drops, etc.
@ -103,7 +104,7 @@ public class BlockListener implements Listener {
* apply drop tables
*/
if (info.hasDropTable()) {
Location dropLocation = getSafeDropLocation(block, !(info.regenerates() && info.getRegenerationInfo().hasTemporaryBlock()));
Location dropLocation = getSafeDropLocation(block, !block.getType().isSolid() || !(info.regenerates() && info.getRegenerationInfo().hasTemporaryBlock()));
for (ItemStack drop : called.getDrops())
if (drop.getType() != Material.AIR && drop.getAmount() > 0)
block.getWorld().dropItemNaturally(dropLocation, drop);

View File

@ -19,6 +19,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.block.BlockInfo;
import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
import net.Indyuce.mmocore.api.block.BlockType;
import net.Indyuce.mmocore.api.block.SkullBlockType;
import net.Indyuce.mmocore.api.block.VanillaBlockType;
import net.Indyuce.mmocore.api.droptable.condition.Condition;
import net.Indyuce.mmocore.api.droptable.condition.ConditionInstance;
@ -48,7 +49,7 @@ public class CustomBlockManager extends MMOManager {
private final List<Function<Block, BlockType>> blockTypes = new ArrayList<>();
public CustomBlockManager() {
registerBlockType(block -> MMOCoreUtils.isPlayerHead(block.getType()) ? new VanillaBlockType(block) : null);
registerBlockType(block -> MMOCoreUtils.isPlayerHead(block.getType()) ? new SkullBlockType(block) : null);
}
public void registerBlockType(Function<Block, BlockType> function) {

View File

@ -19,6 +19,25 @@ exp-curve: mining
# configure drop tables with MMOItems.
# Block Regen is currently only possible using custom mining.
on-mine:
# Config example showing how you can bind drops and experience
# to custom player heads based on the skull texture.
diamond-skull:
# Diamond ore skull texture
material: 'skull{value="eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2EzYmI4NWRlYzEzMjlmZTgyOWNjNmNkY2QzNGUxYmQ2MGVlODMyZjU3MjYyOTY1MWYxNGI1ZTE0NTU1ZGJiMSJ9fX0="}'
drop-table:
items:
- 'vanilla{type=DIAMOND} 1 1-4'
vanilla-drops: false
regen:
time: 20
# Stone block skull texture
temp-block: 'skull{value="eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTU0ODE4MjMzYzgxMTg3M2U4NWY1YTRlYTQ0MjliNzVmMjNiNmFlMGVhNmY1ZmMwZjdiYjQyMGQ3YzQ3MSJ9fX0="}'
triggers:
- 'exp{profession=mining;amount=20}'
emerald:
material: vanilla{type=EMERALD_ORE}
drop-table:

View File

@ -15,6 +15,8 @@ WOODEN_PICKAXE:
STONE_PICKAXE:
can-mine:
- vanilla{type=IRON_ORE}
# MMOItems custom blocks with ID 1
- mmoitems{id=1}
# The block break permissions the tool inherits.
# e.g a stone pickaxe can mine iron ores PLUS
@ -26,6 +28,8 @@ IRON_PICKAXE:
parent: STONE_PICKAXE
can-mine:
- vanilla{type=GOLD_ORE}
# Custom skull with diamond ore texture
- skull{value="eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2EzYmI4NWRlYzEzMjlmZTgyOWNjNmNkY2QzNGUxYmQ2MGVlODMyZjU3MjYyOTY1MWYxNGI1ZTE0NTU1ZGJiMSJ9fX0="}
GOLDEN_PICKAXE:
parent: IRON_PICKAXE