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.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -13,9 +14,11 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
|
||||||
|
import io.github.thebusybiscuit.slimefun4.api.items.Placeable;
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
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.EnergyNetComponent;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
|
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
|
||||||
|
|
||||||
public class SlimefunItem {
|
public class SlimefunItem implements Placeable {
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private ItemState state;
|
private ItemState state;
|
||||||
@ -139,8 +142,7 @@ public class SlimefunItem {
|
|||||||
* @since 4.1.11
|
* @since 4.1.11
|
||||||
*/
|
*/
|
||||||
public String getPermission() { return permission; }
|
public String getPermission() { return permission; }
|
||||||
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
|
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
|
||||||
public boolean isTicking() { return ticking; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.1.11, rename of {@link #getTicker()}.
|
* @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);
|
itemhandlers.stream().filter(c::isInstance).map(c::cast).forEach(callable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTicking() {
|
||||||
|
return ticking;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";
|
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.TeleporterListener;
|
||||||
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
||||||
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
|
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
|
||||||
|
import me.mrCookieSlime.Slimefun.services.BlockDataService;
|
||||||
import me.mrCookieSlime.Slimefun.services.CustomItemDataService;
|
import me.mrCookieSlime.Slimefun.services.CustomItemDataService;
|
||||||
import me.mrCookieSlime.Slimefun.services.CustomTextureService;
|
import me.mrCookieSlime.Slimefun.services.CustomTextureService;
|
||||||
import me.mrCookieSlime.Slimefun.services.MetricsService;
|
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 CustomItemDataService itemDataService = new CustomItemDataService(this, "slimefun_item");
|
||||||
private final CustomTextureService textureService = new CustomTextureService(this);
|
private final CustomTextureService textureService = new CustomTextureService(this);
|
||||||
|
private final BlockDataService blockDataService = new BlockDataService(this, "slimefun_block");
|
||||||
|
|
||||||
private TickerTask ticker;
|
private TickerTask ticker;
|
||||||
private SlimefunLocalization local;
|
private SlimefunLocalization local;
|
||||||
@ -480,5 +482,9 @@ public final class SlimefunPlugin extends JavaPlugin {
|
|||||||
public static CustomTextureService getItemTextureService() {
|
public static CustomTextureService getItemTextureService() {
|
||||||
return instance.textureService;
|
return instance.textureService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BlockDataService getBlockDataService() {
|
||||||
|
return instance.blockDataService;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -195,7 +195,13 @@ public final class GuideSettings {
|
|||||||
lore.add("");
|
lore.add("");
|
||||||
|
|
||||||
for (Map.Entry<String, Integer> entry: contributor.getContributions().entrySet()) {
|
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("");
|
lore.add("");
|
||||||
|
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.Tag;
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.TileState;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -73,7 +75,15 @@ public class ToolListener implements Listener {
|
|||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
else {
|
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());
|
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||||
if (blockHandler != null) {
|
if (blockHandler != null) {
|
||||||
@ -192,6 +202,14 @@ public class ToolListener implements Listener {
|
|||||||
if (sensitiveMaterials.contains(block2.getType())) {
|
if (sensitiveMaterials.contains(block2.getType())) {
|
||||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
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)) {
|
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||||
if (blockHandler != null) {
|
if (blockHandler != null) {
|
||||||
@ -211,6 +229,14 @@ public class ToolListener implements Listener {
|
|||||||
|
|
||||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock());
|
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)) {
|
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||||
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
SlimefunBlockHandler blockHandler = utilities.blockHandlers.get(sfItem.getID());
|
||||||
if (blockHandler != null) {
|
if (blockHandler != null) {
|
||||||
@ -223,7 +249,8 @@ public class ToolListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (allow) {
|
if (allow) {
|
||||||
drops.add(BlockStorage.retrieve(e.getBlock()));
|
drops.addAll(sfItem.getDrops());
|
||||||
|
BlockStorage.clearBlockInfo(e.getBlock());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
e.setCancelled(true);
|
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