1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Fixed blocks turning into CSCoreLib heads for all newly placed

non-ticking blocks.
This commit is contained in:
TheBusyBiscuit 2019-12-03 20:20:33 +01:00
parent ae2a75b1d1
commit 0fd7892ca4
6 changed files with 104 additions and 6 deletions

View File

@ -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);
}

View File

@ -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;
@ -140,7 +143,6 @@ public class SlimefunItem {
*/ */
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();
}
} }

View File

@ -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;
@ -481,4 +483,8 @@ public final class SlimefunPlugin extends JavaPlugin {
return instance.textureService; return instance.textureService;
} }
public static BlockDataService getBlockDataService() {
return instance.blockDataService;
}
} }

View File

@ -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("");

View File

@ -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 {
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); 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);

View File

@ -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);
}
}