Skip to content

Commit e163bb2

Browse files
Add quicksand and misc changes
1 parent 17f85c0 commit e163bb2

File tree

8 files changed

+129
-37
lines changed

8 files changed

+129
-37
lines changed

parallelworlds/src/main/java/parallelmc/parallelworlds/ParallelWorlds.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,9 @@
22

33
import com.github.retrooper.packetevents.PacketEvents;
44
import com.github.retrooper.packetevents.event.PacketListenerPriority;
5-
import net.minecraft.core.*;
6-
import net.minecraft.core.registries.BuiltInRegistries;
7-
import net.minecraft.core.registries.Registries;
8-
import net.minecraft.resources.Identifier;
9-
import net.minecraft.resources.ResourceKey;
10-
import net.minecraft.world.level.block.Block;
11-
import net.minecraft.world.level.block.SoundType;
12-
import net.minecraft.world.level.block.state.BlockBehaviour;
13-
import net.minecraft.world.level.material.MapColor;
145
import org.bukkit.plugin.java.JavaPlugin;
15-
import org.jetbrains.annotations.Nullable;
16-
import parallelmc.parallelworlds.blocks.TestBlock;
176
import parallelmc.parallelworlds.events.BlockPacketListener;
187

19-
import java.lang.reflect.Field;
20-
import java.util.Map;
21-
228
public final class ParallelWorlds extends JavaPlugin {
239

2410
@Override

parallelworlds/src/main/java/parallelmc/parallelworlds/ParallelWorldsBootstrapper.java

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
import org.bukkit.plugin.java.JavaPlugin;
1818
import org.jetbrains.annotations.NotNull;
1919
import org.jetbrains.annotations.Nullable;
20+
import parallelmc.parallelworlds.blocks.QuicksandBlock;
2021
import parallelmc.parallelworlds.blocks.TestBlock;
2122

22-
import java.lang.reflect.Field;
2323
import java.util.Map;
2424
import java.util.logging.Level;
2525
import java.util.logging.Logger;
2626

27+
import static parallelmc.parallelworlds.ReflectionHelper.getPrivateField;
28+
2729
public class ParallelWorldsBootstrapper implements PluginBootstrap {
2830

2931
private static int firstCustomId = 0;
@@ -44,34 +46,23 @@ public void bootstrap(BootstrapContext context) {
4446
return;
4547
}
4648

49+
4750
ResourceKey<Block> testBlockKey = ResourceKey.create(Registries.BLOCK, Identifier.fromNamespaceAndPath("parallelutils", "testblock"));
48-
Block block = new TestBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE).strength(0.5f).sound(SoundType.AMETHYST).setId(testBlockKey));
51+
Block testBlock = new TestBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE).strength(0.5f).sound(SoundType.AMETHYST).setId(testBlockKey));
52+
registerBlock(blockRegistry, testBlockKey, testBlock);
4953

50-
registerBlock(blockRegistry, testBlockKey, block);
54+
ResourceKey<Block> quicksandKey = ResourceKey.create(Registries.BLOCK, Identifier.fromNamespaceAndPath("parallelutils", "quicksand"));
55+
Block quicksandBlock = new QuicksandBlock(BlockBehaviour.Properties.of().mapColor(MapColor.SAND).strength(0.25F).sound(SoundType.SAND)
56+
.dynamicShape().noOcclusion().isRedstoneConductor((blockState, blockGetter, blockPos) -> false).setId(quicksandKey));
57+
registerBlock(blockRegistry, quicksandKey, quicksandBlock);
5158
}
5259

5360
@Override
5461
public JavaPlugin createPlugin(PluginProviderContext context) {
5562
return PluginBootstrap.super.createPlugin(context);
5663
}
5764

58-
@Nullable
59-
public static <T, U> U getPrivateField(String fieldName, Class<T> clazz, T object, Class<U> retClazz) throws ClassCastException{
60-
Field field;
61-
62-
try {
63-
field = clazz.getDeclaredField(fieldName);
6465

65-
field.setAccessible(true);
66-
67-
Object o = field.get(object);
68-
69-
return (U) o;
70-
} catch (NoSuchFieldException | IllegalAccessException e) {
71-
e.printStackTrace();
72-
return null;
73-
}
74-
}
7566

7667
// This is private since it can ONLY be run during bootstrap or things break real bad
7768
@Nullable
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package parallelmc.parallelworlds;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
5+
import java.lang.reflect.Field;
6+
7+
public class ReflectionHelper {
8+
9+
@Nullable
10+
public static <T, U> U getPrivateField(String fieldName, Class<T> clazz, T object, Class<U> retClazz) throws ClassCastException{
11+
Field field;
12+
13+
try {
14+
field = clazz.getDeclaredField(fieldName);
15+
16+
field.setAccessible(true);
17+
18+
Object o = field.get(object);
19+
20+
return (U) o;
21+
} catch (NoSuchFieldException | IllegalAccessException e) {
22+
e.printStackTrace();
23+
return null;
24+
}
25+
}
26+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package parallelmc.parallelworlds.blocks;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import net.minecraft.core.BlockPos;
5+
import net.minecraft.world.entity.LivingEntity;
6+
import net.minecraft.world.item.ItemStack;
7+
import net.minecraft.world.item.Items;
8+
import net.minecraft.world.level.LevelAccessor;
9+
import net.minecraft.world.level.block.Blocks;
10+
import net.minecraft.world.level.block.PowderSnowBlock;
11+
import net.minecraft.world.level.block.state.BlockState;
12+
import org.jetbrains.annotations.NotNull;
13+
import org.jspecify.annotations.Nullable;
14+
15+
public class QuicksandBlock extends PowderSnowBlock {
16+
17+
public static final MapCodec<PowderSnowBlock> CODEC = simpleCodec(QuicksandBlock::new);
18+
19+
@Override
20+
public MapCodec<PowderSnowBlock> codec() {
21+
return CODEC;
22+
}
23+
24+
public QuicksandBlock(Properties properties) {
25+
super(properties);
26+
}
27+
28+
@Override
29+
public @NotNull ItemStack pickupBlock(@Nullable LivingEntity owner, LevelAccessor level, BlockPos pos, BlockState state) {
30+
level.setBlock(pos, Blocks.AIR.defaultBlockState(), 11);
31+
32+
return new ItemStack(Items.BUCKET); // TODO: Update this
33+
}
34+
35+
}

parallelworlds/src/main/java/parallelmc/parallelworlds/events/BlockPacketListener.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import com.github.retrooper.packetevents.protocol.world.chunk.impl.v_1_18.Chunk_v1_18;
99
import com.github.retrooper.packetevents.protocol.world.chunk.palette.DataPalette;
1010
import com.github.retrooper.packetevents.protocol.world.chunk.palette.ListPalette;
11-
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
1211
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerBlockAction;
1312
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerBlockChange;
1413
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerChunkData;
14+
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDeclareCommands;
1515
import net.minecraft.world.level.block.Block;
1616
import net.minecraft.world.level.block.Blocks;
1717
import net.minecraft.world.level.block.state.BlockState;
@@ -20,6 +20,8 @@
2020
import java.util.logging.Level;
2121
import java.util.logging.Logger;
2222

23+
import static parallelmc.parallelworlds.ReflectionHelper.getPrivateField;
24+
2325

2426
public class BlockPacketListener implements PacketListener {
2527

@@ -53,10 +55,10 @@ public void onPacketSend(PacketSendEvent event) {
5355

5456
Chunk_v1_18 chunkV118 = (Chunk_v1_18) c;
5557

56-
DataPalette palette = ParallelWorldsBootstrapper.getPrivateField("chunkData", Chunk_v1_18.class, chunkV118, DataPalette.class);
58+
DataPalette palette = getPrivateField("chunkData", Chunk_v1_18.class, chunkV118, DataPalette.class);
5759
ListPalette lp = (ListPalette) palette.palette;
5860

59-
int[] palatteData = ParallelWorldsBootstrapper.getPrivateField("data", ListPalette.class, lp, int[].class);
61+
int[] palatteData = getPrivateField("data", ListPalette.class, lp, int[].class);
6062

6163
for (int i = 0; i< palatteData.length; i++) {
6264
if (palatteData[i] >= firstCustomId) {
@@ -90,7 +92,17 @@ public void onPacketSend(PacketSendEvent event) {
9092
packet.setBlockTypeId(replace_state);
9193
event.markForReEncode(true);
9294
}
95+
} else if (event.getPacketType() == PacketType.Play.Server.DECLARE_COMMANDS) {
96+
WrapperPlayServerDeclareCommands packet = new WrapperPlayServerDeclareCommands(event);
97+
98+
packet.getNodes();
9399
}
100+
// } else if (event.getPacketType() != PacketType.Play.Server.ENTITY_HEAD_LOOK &&
101+
// event.getPacketType() != PacketType.Play.Server.ENTITY_RELATIVE_MOVE &&
102+
// event.getPacketType() != PacketType.Play.Server.ENTITY_RELATIVE_MOVE_AND_ROTATION &&
103+
// event.getPacketType() != PacketType.Play.Server.ENTITY_VELOCITY){
104+
// Logger.getGlobal().log(Level.WARNING, event.getPacketType().getName());
105+
// }
94106
}
95107

96108

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package parallelmc.parallelworlds.events;
2+
3+
import net.minecraft.world.item.Items;
4+
import net.minecraft.world.level.block.Block;
5+
import net.minecraft.world.level.block.state.BlockState;
6+
import org.bukkit.craftbukkit.block.CraftBlock;
7+
import org.bukkit.event.EventHandler;
8+
import org.bukkit.event.EventPriority;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.block.BlockBreakEvent;
11+
12+
public class BreakBlockListener implements Listener {
13+
14+
@EventHandler(priority = EventPriority.HIGHEST)
15+
public void handleBlockBreak(BlockBreakEvent event) {
16+
CraftBlock cb = (CraftBlock)event.getBlock();
17+
18+
19+
BlockState blockState = cb.getNMS();
20+
21+
int id = Block.getId(blockState);
22+
}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package parallelmc.parallelworlds.registry;
2+
3+
public class ParallelBlockRegistry {
4+
5+
private static ParallelBlockRegistry instance = null;
6+
7+
private ParallelBlockRegistry() {
8+
9+
}
10+
11+
public static ParallelBlockRegistry getInstance() {
12+
if (instance == null) {
13+
instance = new ParallelBlockRegistry();
14+
}
15+
16+
return instance;
17+
}
18+
}

settings.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ pluginManagement {
77

88
rootProject.name = "ParallelUtils"
99
include 'api'
10-
include 'modules'
10+
include 'modules'
11+
include 'parallelworlds'

0 commit comments

Comments
 (0)