mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Fixed blocks turning into CSCoreLib heads for all newly placed
non-ticking blocks.
This commit is contained in:
parent
ae2a75b1d1
commit
0fd7892ca4
@ -0,0 +1,15 @@
|
||||
package io.github.thebusybiscuit.slimefun4.api.items;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public interface Placeable {
|
||||
|
||||
boolean isTicking();
|
||||
|
||||
Collection<ItemStack> getDrops();
|
||||
Collection<ItemStack> getDrops(Player p);
|
||||
|
||||
}
|
@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@ -13,9 +14,11 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||
import io.github.thebusybiscuit.slimefun4.api.items.Placeable;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
@ -33,7 +36,7 @@ import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyNetComponent;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
|
||||
|
||||
public class SlimefunItem {
|
||||
public class SlimefunItem implements Placeable {
|
||||
|
||||
private String id;
|
||||
private ItemState state;
|
||||
@ -139,8 +142,7 @@ public class SlimefunItem {
|
||||
* @since 4.1.11
|
||||
*/
|
||||
public String getPermission() { return permission; }
|
||||
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
|
||||
public boolean isTicking() { return ticking; }
|
||||
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
|
||||
|
||||
/**
|
||||
* @since 4.1.11, rename of {@link #getTicker()}.
|
||||
@ -612,8 +614,22 @@ public class SlimefunItem {
|
||||
itemhandlers.stream().filter(c::isInstance).map(c::cast).forEach(callable);
|
||||
}
|
||||
|
||||
public boolean isTicking() {
|
||||
return ticking;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getDrops() {
|
||||
return Arrays.asList(item.clone());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getDrops(Player p) {
|
||||
return getDrops();
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +74,7 @@ import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
|
||||
import me.mrCookieSlime.Slimefun.services.BlockDataService;
|
||||
import me.mrCookieSlime.Slimefun.services.CustomItemDataService;
|
||||
import me.mrCookieSlime.Slimefun.services.CustomTextureService;
|
||||
import me.mrCookieSlime.Slimefun.services.MetricsService;
|
||||
@ -88,6 +89,7 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
|
||||
private final CustomItemDataService itemDataService = new CustomItemDataService(this, "slimefun_item");
|
||||
private final CustomTextureService textureService = new CustomTextureService(this);
|
||||
private final BlockDataService blockDataService = new BlockDataService(this, "slimefun_block");
|
||||
|
||||
private TickerTask ticker;
|
||||
private SlimefunLocalization local;
|
||||
@ -480,5 +482,9 @@ public final class SlimefunPlugin extends JavaPlugin {
|
||||
public static CustomTextureService getItemTextureService() {
|
||||
return instance.textureService;
|
||||
}
|
||||
|
||||
public static BlockDataService getBlockDataService() {
|
||||
return instance.blockDataService;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -195,7 +195,13 @@ public final class GuideSettings {
|
||||
lore.add("");
|
||||
|
||||
for (Map.Entry<String, Integer> entry: contributor.getContributions().entrySet()) {
|
||||
lore.add(ChatColors.color(entry.getKey() + " &7(" + entry.getValue() + " Commit" + (entry.getValue() > 1 ? "s": "") + ")"));
|
||||
String info = entry.getKey();
|
||||
|
||||
if (entry.getValue() > 0) {
|
||||
info += " &7(" + entry.getValue() + " Commit" + (entry.getValue() > 1 ? "s": "") + ")";
|
||||
}
|
||||
|
||||
lore.add(ChatColors.color(info));
|
||||
}
|
||||
|
||||
lore.add("");
|
||||
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
@ -12,6 +13,7 @@ import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.TileState;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -73,7 +75,15 @@ public class ToolListener implements Listener {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
else {
|
||||
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
||||
boolean supportsPersistentData = e.getBlock().getState() instanceof TileState;
|
||||
|
||||
if (supportsPersistentData) {
|
||||
SlimefunPlugin.getBlockDataService().setBlockData((TileState) e.getBlock().getState(), sfItem.getID());
|
||||
}
|
||||
|
||||
if (!supportsPersistentData || sfItem.isTicking()) {
|
||||
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
||||
}
|
||||
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
@ -192,6 +202,14 @@ public class ToolListener implements Listener {
|
||||
if (sensitiveMaterials.contains(block2.getType())) {
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
||||
|
||||
if (sfItem == null && e.getBlock().getState() instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) e.getBlock().getState());
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
@ -211,6 +229,14 @@ public class ToolListener implements Listener {
|
||||
|
||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock());
|
||||
|
||||
if (sfItem == null && e.getBlock().getState() instanceof TileState) {
|
||||
Optional<String> blockData = SlimefunPlugin.getBlockDataService().getBlockData((TileState) e.getBlock().getState());
|
||||
|
||||
if (blockData.isPresent()) {
|
||||
sfItem = SlimefunItem.getByID(blockData.get());
|
||||
}
|
||||
}
|
||||
|
||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||
if (blockHandler != null) {
|
||||
@ -223,7 +249,8 @@ public class ToolListener implements Listener {
|
||||
}
|
||||
}
|
||||
if (allow) {
|
||||
drops.add(BlockStorage.retrieve(e.getBlock()));
|
||||
drops.addAll(sfItem.getDrops());
|
||||
BlockStorage.clearBlockInfo(e.getBlock());
|
||||
}
|
||||
else {
|
||||
e.setCancelled(true);
|
||||
|
@ -0,0 +1,28 @@
|
||||
package me.mrCookieSlime.Slimefun.services;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.block.TileState;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI;
|
||||
|
||||
public class BlockDataService {
|
||||
|
||||
private final NamespacedKey namespacedKey;
|
||||
|
||||
public BlockDataService(Plugin plugin, String key) {
|
||||
namespacedKey = new NamespacedKey(plugin, key);
|
||||
}
|
||||
|
||||
public void setBlockData(TileState tileEntity, String value) {
|
||||
PersistentDataAPI.setString(tileEntity, namespacedKey, value);
|
||||
tileEntity.update();
|
||||
}
|
||||
|
||||
public Optional<String> getBlockData(TileState tileEntity) {
|
||||
return PersistentDataAPI.getOptionalString(tileEntity, namespacedKey);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user