Skip to content

Commit 0816c29

Browse files
committed
Trying to add custom block mining speed
1 parent 0b0329a commit 0816c29

File tree

6 files changed

+198
-6
lines changed

6 files changed

+198
-6
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package xyz.prismenetwork.kelpmodloader.Block;
2+
3+
import org.bukkit.Material;
4+
import org.bukkit.block.Block;
5+
import org.bukkit.block.BlockFace;
6+
import org.bukkit.block.data.MultipleFacing;
7+
8+
public class BlockUtils {
9+
public static boolean parseBool(String s) {
10+
if (s.equalsIgnoreCase("1")) {
11+
return true;
12+
} else {
13+
return false;
14+
}
15+
}
16+
17+
public static String parseString(boolean b) {
18+
if (b) {
19+
return "1";
20+
} else {
21+
return "0";
22+
}
23+
}
24+
25+
public static int idFromBlock(Block block) {
26+
if (block.getType().equals(Material.BROWN_MUSHROOM_BLOCK)) {
27+
MultipleFacing facing = (MultipleFacing) block.getBlockData();
28+
boolean DOWN = facing.hasFace(BlockFace.DOWN);
29+
boolean UP = facing.hasFace(BlockFace.UP);
30+
boolean EAST = facing.hasFace(BlockFace.EAST);
31+
boolean NORTH = facing.hasFace(BlockFace.NORTH);
32+
boolean SOUTH = facing.hasFace(BlockFace.SOUTH);
33+
boolean WEST = facing.hasFace(BlockFace.WEST);
34+
35+
return Integer.parseInt(parseString(DOWN) + parseString(UP) + parseString(EAST) + parseString(NORTH) + parseString(SOUTH) + parseString(WEST), 2);
36+
}
37+
return 0;
38+
}
39+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package xyz.prismenetwork.kelpmodloader.Block.BreakHandler;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.ProtocolLib;
5+
import com.comphenix.protocol.ProtocolLibrary;
6+
import com.comphenix.protocol.ProtocolManager;
7+
import com.comphenix.protocol.events.PacketContainer;
8+
import com.comphenix.protocol.wrappers.BlockPosition;
9+
import org.bukkit.GameMode;
10+
import org.bukkit.Material;
11+
import org.bukkit.block.Block;
12+
import org.bukkit.event.EventHandler;
13+
import org.bukkit.event.Listener;
14+
import org.bukkit.event.block.Action;
15+
import org.bukkit.event.block.BlockDamageAbortEvent;
16+
import org.bukkit.event.block.BlockDamageEvent;
17+
import org.bukkit.event.player.PlayerInteractEvent;
18+
import xyz.prismenetwork.kelpmodloader.Block.BlockUtils;
19+
import xyz.prismenetwork.kelpmodloader.Block.ModdedBlock;
20+
import xyz.prismenetwork.kelpmodloader.ModsAPI.ItemUtils;
21+
import xyz.prismenetwork.kelpmodloader.Utils;
22+
23+
import java.time.Instant;
24+
import java.util.List;
25+
import java.util.Random;
26+
27+
public class BlockBreakEvent implements Listener {
28+
@EventHandler
29+
public void onBreak(BlockDamageEvent event) {
30+
if (event.getBlock().getType().equals(Material.BROWN_MUSHROOM_BLOCK)) {
31+
if (BlockUtils.idFromBlock(event.getBlock()) != 63) {
32+
event.setCancelled(true);
33+
Block block = event.getBlock();
34+
35+
BreakManager.PlayerBreakingBlock.put(event.getPlayer(), block);
36+
BreakManager.PlayerBreakingTime.put(event.getPlayer(), Instant.now().toEpochMilli());
37+
}
38+
} else {
39+
if (BreakManager.PlayerBreakingBlock.containsKey(event.getPlayer())) {
40+
event.getPlayer().sendBlockDamage(BreakManager.PlayerBreakingBlock.get(event.getPlayer()).getLocation(), 0);
41+
BreakManager.PlayerBreakingBlock.remove(event.getPlayer());
42+
}
43+
}
44+
}
45+
@EventHandler
46+
public void onAbort(BlockDamageAbortEvent event) {
47+
if (BreakManager.PlayerBreakingBlock.containsKey(event.getPlayer())) {
48+
BreakManager.PlayerBreakingBlock.remove(event.getPlayer());
49+
if (!event.getPlayer().getGameMode().equals(GameMode.CREATIVE)) {
50+
event.getPlayer().setGameMode(GameMode.SURVIVAL);
51+
}
52+
}
53+
if (BreakManager.PlayerBreakingTime.containsKey(event.getPlayer())) {
54+
BreakManager.PlayerBreakingTime.remove(event.getPlayer());
55+
}
56+
}
57+
58+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package xyz.prismenetwork.kelpmodloader.Block.BreakHandler;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.ProtocolLibrary;
5+
import com.comphenix.protocol.ProtocolManager;
6+
import com.comphenix.protocol.events.*;
7+
import com.comphenix.protocol.wrappers.BlockPosition;
8+
import org.bukkit.GameMode;
9+
import org.bukkit.attribute.Attribute;
10+
import org.bukkit.attribute.AttributeModifier;
11+
import org.bukkit.block.Block;
12+
import org.bukkit.entity.Player;
13+
import org.bukkit.inventory.EquipmentSlot;
14+
import org.bukkit.inventory.meta.ItemMeta;
15+
import org.bukkit.plugin.Plugin;
16+
import org.bukkit.potion.PotionEffect;
17+
import org.bukkit.potion.PotionEffectType;
18+
import org.bukkit.scheduler.BukkitScheduler;
19+
import xyz.prismenetwork.kelpmodloader.Block.BlockUtils;
20+
import xyz.prismenetwork.kelpmodloader.Block.ModdedBlock;
21+
import xyz.prismenetwork.kelpmodloader.Constant;
22+
import xyz.prismenetwork.kelpmodloader.KelpModLoader;
23+
24+
import javax.swing.plaf.nimbus.State;
25+
import java.time.Instant;
26+
import java.time.temporal.TemporalField;
27+
import java.util.HashMap;
28+
import java.util.List;
29+
import java.util.Random;
30+
import java.util.UUID;
31+
32+
public class BreakManager {
33+
public static HashMap<Player, Block> PlayerBreakingBlock = new HashMap<>();
34+
public static HashMap<Player, Long> PlayerBreakingTime = new HashMap<>();
35+
public static void Setup() {
36+
BukkitScheduler scheduler = KelpModLoader.getInstance.getServer().getScheduler();
37+
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
38+
39+
//manager.addPacketListener(new PacketAdapter(KelpModLoader.getInstance, ListenerPriority.HIGHEST, PacketType.Play.Server.BLOCK_BREAK_ANIMATION){
40+
// @Override
41+
// public void onPacketSending(PacketEvent event) {
42+
// event.setCancelled(true);
43+
// }
44+
//});
45+
46+
scheduler.scheduleSyncRepeatingTask(KelpModLoader.getInstance, new Runnable() {
47+
@Override
48+
public void run() {
49+
PlayerBreakingBlock.forEach((p, b) -> {
50+
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 5+((p.getPing()/40)), 200, true, false));
51+
float breakstage = 0;
52+
53+
ModdedBlock[] block = {new ModdedBlock()};
54+
55+
Constant.Blocks.forEach(blck -> {
56+
if (blck.getId() == BlockUtils.idFromBlock(b)) {
57+
block[0] = blck;
58+
}
59+
});
60+
61+
breakstage = ((Instant.now().toEpochMilli() - PlayerBreakingTime.get(p))*1000)/20f;
62+
63+
PacketContainer container = new PacketContainer(PacketType.Play.Server.BLOCK_BREAK_ANIMATION);
64+
container.getIntegers().write(0, p.getEntityId()*1000);
65+
container.getIntegers().write(1, Math.round(breakstage));
66+
container.getBlockPositionModifier().write(0, new BlockPosition(b.getX(), b.getY(), b.getZ()));
67+
68+
if (breakstage > block[0].getBreakTime()) {
69+
b.breakNaturally();
70+
}
71+
72+
ProtocolLibrary.getProtocolManager().sendServerPacket(p, container);
73+
});
74+
}
75+
}, 0L, 0L);
76+
}
77+
}

src/main/java/xyz/prismenetwork/kelpmodloader/Block/ModdedBlock.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
public class ModdedBlock {
44
public String name;
55
public String TextureName;
6+
private int BreakTime = 1;
67
private int ID;
78
/**
89
* Return the id of the block.
@@ -18,4 +19,13 @@ public int getId() {
1819
public void setID(int nID) {
1920
ID = nID;
2021
}
22+
23+
24+
public int getBreakTime() {
25+
return BreakTime;
26+
}
27+
28+
public void setBreakTime(int breakTime) {
29+
BreakTime = breakTime;
30+
}
2131
}

src/main/java/xyz/prismenetwork/kelpmodloader/Dependency/Downloader.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package xyz.prismenetwork.kelpmodloader.Dependency;
22

3+
import org.bukkit.Bukkit;
4+
import org.bukkit.plugin.Plugin;
35
import xyz.prismenetwork.kelpmodloader.KelpModLoader;
46

57
import java.io.File;
@@ -10,22 +12,24 @@
1012
import java.nio.file.StandardCopyOption;
1113

1214
public class Downloader {
13-
static File pluginFolder = KelpModLoader.getPlugin(KelpModLoader.class).getDataFolder().getParentFile();
15+
static File pluginFolder = KelpModLoader.getInstance.getDataFolder().getParentFile();
1416
public static void download(String name, String link) {
1517

16-
if (KelpModLoader.getPlugin(KelpModLoader.class).getServer().getPluginManager().getPlugin(name)!=null) return;
18+
if (KelpModLoader.getInstance.getServer().getPluginManager().getPlugin(name)!=null) return;
1719

18-
KelpModLoader.getPlugin(KelpModLoader.class).getLogger().warning(name + " is not installed, downloading ProtocolLib from " + link);
20+
KelpModLoader.getInstance.getLogger().warning(name + " is not installed, downloading ProtocolLib from " + link);
1921

2022
try {
2123
InputStream in = new URL(link).openStream();
2224
Files.copy(in, Path.of(pluginFolder.getPath() + "/"+ name + ".jar"), StandardCopyOption.REPLACE_EXISTING);
2325

2426
KelpModLoader.getInstance.getPluginLoader().loadPlugin(new File(pluginFolder.getPath() + "/" + name + ".jar"));
27+
KelpModLoader.getInstance.getPluginLoader().enablePlugin(Bukkit.getPluginManager().getPlugin(name));
2528

26-
} catch (Exception e) {
27-
KelpModLoader.getPlugin(KelpModLoader.class).getLogger().warning("Could not download protocolLib:");
29+
} catch (Exception e) {
30+
KelpModLoader.getInstance.getLogger().warning("Could not download " + name + ":");
2831
e.printStackTrace();
32+
KelpModLoader.getInstance.getServer().shutdown();
2933
}
3034

3135
}

src/main/java/xyz/prismenetwork/kelpmodloader/KelpModLoader.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package xyz.prismenetwork.kelpmodloader;
22

33
import org.bukkit.plugin.java.JavaPlugin;
4+
import xyz.prismenetwork.kelpmodloader.Block.BreakHandler.BreakManager;
45
import xyz.prismenetwork.kelpmodloader.Block.CreateBlock;
56
import xyz.prismenetwork.kelpmodloader.Dependency.DependencyManager;
7+
import xyz.prismenetwork.kelpmodloader.Block.BreakHandler.BlockBreakEvent;
68
import xyz.prismenetwork.kelpmodloader.EventHandler.BlockPlaceEvent;
79
import xyz.prismenetwork.kelpmodloader.EventHandler.BlockUpdateEvent;
810
import xyz.prismenetwork.kelpmodloader.Item.GenerateBlockItems;
911
import xyz.prismenetwork.kelpmodloader.Mods.ModsLoader;
1012
import xyz.prismenetwork.kelpmodloader.Pack.CreatePack;
11-
import xyz.prismenetwork.kelpmodloader.Dependency.Downloader;
1213

1314
import java.io.IOException;
1415

@@ -30,6 +31,7 @@ public void onEnable() {
3031
//Register event
3132
getServer().getPluginManager().registerEvents(new BlockUpdateEvent(), this);
3233
getServer().getPluginManager().registerEvents(new BlockPlaceEvent(), this);
34+
getServer().getPluginManager().registerEvents(new BlockBreakEvent(), this);
3335

3436
//Load mods
3537
new ModsLoader().load();
@@ -60,6 +62,8 @@ public void onEnable() {
6062
"§2Status: §aStarted \n" +
6163
"§2Task: §aKML is loaded! \n" +
6264
"§2---------------------------------- ");
65+
66+
BreakManager.Setup();
6367
}
6468

6569
@Override

0 commit comments

Comments
 (0)