Preparations for Polymer addon

This commit is contained in:
Martin Prokoph
2024-07-24 10:49:06 +02:00
parent 32cdfe04d6
commit 5bbfc74a48
36 changed files with 423 additions and 179 deletions

View File

@@ -1,6 +1,5 @@
package eu.midnightdust.motschen.rocks;
import eu.midnightdust.motschen.rocks.world.FeatureInjector;
import eu.midnightdust.motschen.rocks.world.configured_feature.MiscFeatures;
import eu.midnightdust.motschen.rocks.world.configured_feature.NetherFeatures;
import eu.midnightdust.motschen.rocks.world.configured_feature.RockFeatures;

View File

@@ -10,9 +10,10 @@ import eu.midnightdust.motschen.rocks.config.RocksConfig;
import eu.midnightdust.motschen.rocks.world.*;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.block.Block;
import net.minecraft.item.*;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
@@ -24,8 +25,8 @@ import net.minecraft.util.Identifier;
import java.util.ArrayList;
import java.util.List;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.registerBlockWithItem;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.registerItem;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.registerBlockWithItem;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.registerItem;
public class RocksMain implements ModInitializer {
public static final String MOD_ID = "rocks";
@@ -64,15 +65,15 @@ public class RocksMain implements ModInitializer {
public static Block Geyser = new OverworldGeyser();
public static Block NetherGeyser = new NetherGeyser();
public static Item CobblestoneSplitter = new Item(new Item.Settings());
public static Item GraniteSplitter = new Item(new Item.Settings());
public static Item DioriteSplitter = new Item(new Item.Settings());
public static Item AndesiteSplitter = new Item(new Item.Settings());
public static Item SandStoneSplitter = new Item(new Item.Settings());
public static Item RedSandStoneSplitter = new Item(new Item.Settings());
public static Item EndStoneSplitter = new Item(new Item.Settings());
public static Item NetherrackSplitter = new Item(new Item.Settings());
public static Item SoulSoilSplitter = new Item(new Item.Settings());
public static Item CobblestoneSplitter;
public static Item GraniteSplitter;
public static Item DioriteSplitter;
public static Item AndesiteSplitter;
public static Item SandStoneSplitter;
public static Item RedSandStoneSplitter;
public static Item EndStoneSplitter;
public static Item NetherrackSplitter;
public static Item SoulSoilSplitter;
public static List<ItemStack> groupItems = new ArrayList<>();
public static ItemGroup RocksGroup;
public static final RegistryKey<ItemGroup> ROCKS_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, Identifier.of(MOD_ID, "rocks"));
@@ -111,6 +112,16 @@ public class RocksMain implements ModInitializer {
registerBlockWithItem(Identifier.of(MOD_ID,"seashell"), Seashell);
registerBlockWithItem(Identifier.of(MOD_ID,"starfish"), Starfish);
CobblestoneSplitter = simpleItem();
GraniteSplitter = simpleItem();
DioriteSplitter = simpleItem();
AndesiteSplitter = simpleItem();
SandStoneSplitter = simpleItem();
RedSandStoneSplitter = simpleItem();
EndStoneSplitter = simpleItem();
NetherrackSplitter = simpleItem();
SoulSoilSplitter = simpleItem();
registerItem(Identifier.of(MOD_ID,"cobblestone_splitter"), CobblestoneSplitter);
registerItem(Identifier.of(MOD_ID,"granite_splitter"), GraniteSplitter);
registerItem(Identifier.of(MOD_ID,"diorite_splitter"), DioriteSplitter);
@@ -121,15 +132,20 @@ public class RocksMain implements ModInitializer {
registerItem(Identifier.of(MOD_ID,"netherrack_splitter"), NetherrackSplitter);
registerItem(Identifier.of(MOD_ID,"soul_soil_splitter"), SoulSoilSplitter);
RocksGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.rocks.rocks")).icon(() -> new ItemStack(RocksMain.Rock)).entries(((displayContext, entries) -> {
List<ItemStack> visibleGroupItems = new ArrayList<>(groupItems);
entries.addAll(visibleGroupItems);
})).build();
Registry.register(Registries.ITEM_GROUP, ROCKS_GROUP, RocksGroup);
new FeatureRegistry<>();
registerItemGroup();
new FeatureRegistry();
FeatureInjector.init();
BlockEntityInit.init();
}
public static Identifier id(String path) {
return Identifier.of(MOD_ID, path);
}
public static Item simpleItem() {
return new Item(new Item.Settings());
}
public static void registerItemGroup() {
RocksGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.rocks.rocks")).icon(() -> new ItemStack(RocksMain.Rock)).entries(((displayContext, entries) -> entries.addAll(groupItems))).build();
Registry.register(Registries.ITEM_GROUP, ROCKS_GROUP, RocksGroup);
}
}

View File

@@ -28,7 +28,7 @@ public class NetherGeyser extends BlockWithEntity implements BlockEntityProvider
public static final BooleanProperty ACTIVE = BooleanProperty.of("active");
public NetherGeyser() {
super(AbstractBlock.Settings.copy(Blocks.STONE).strength(10).noCollision().nonOpaque().sounds(BlockSoundGroup.STONE));
super(AbstractBlock.Settings.copy(Blocks.STONE).strength(10).noCollision().dynamicBounds().nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(ACTIVE, false));
}

View File

@@ -32,7 +32,7 @@ public class OverworldGeyser extends BlockWithEntity implements BlockEntityProvi
public static final BooleanProperty SNOWY = Properties.SNOWY;
public OverworldGeyser() {
super(AbstractBlock.Settings.copy(Blocks.STONE).strength(10).noCollision().nonOpaque().sounds(BlockSoundGroup.STONE));
super(AbstractBlock.Settings.copy(Blocks.STONE).strength(10).noCollision().dynamicBounds().nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(ACTIVE, false).with(SNOWY, false));
}

View File

@@ -16,7 +16,7 @@ public class Pinecone extends Block {
private static final VoxelShape SHAPE;
public Pinecone() {
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().sounds(BlockSoundGroup.WOOD));
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().dynamicBounds().sounds(BlockSoundGroup.WOOD));
this.setDefaultState(this.stateManager.getDefaultState());
}

View File

@@ -28,7 +28,7 @@ public class Rock extends Block {
private static final EnumProperty<RockVariation> ROCK_VARIATION = RocksMain.ROCK_VARIATION;
public Rock() {
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().sounds(BlockSoundGroup.STONE));
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().dynamicBounds().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(ROCK_VARIATION, RockVariation.TINY));
}

View File

@@ -33,7 +33,7 @@ public class Seashell extends Block implements Waterloggable {
public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
public Seashell() {
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().sounds(BlockSoundGroup.STONE));
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().dynamicBounds().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(SEASHELL_VARIATION, SeashellVariation.PINK).with(WATERLOGGED, false));
}

View File

@@ -39,7 +39,7 @@ public class Starfish extends Block implements Waterloggable {
public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
public Starfish() {
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().sounds(BlockSoundGroup.CORAL));
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().dynamicBounds().sounds(BlockSoundGroup.CORAL));
this.setDefaultState(this.stateManager.getDefaultState().with(STARFISH_VARIATION, StarfishVariation.RED).with(WATERLOGGED, false));
}

View File

@@ -31,7 +31,7 @@ public class Stick extends Block {
public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
public Stick() {
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().sounds(BlockSoundGroup.WOOD));
super(AbstractBlock.Settings.copy(Blocks.POPPY).nonOpaque().dynamicBounds().sounds(BlockSoundGroup.WOOD));
this.setDefaultState(this.stateManager.getDefaultState().with(STICK_VARIATION, StickVariation.SMALL).with(WATERLOGGED, false));
}

View File

@@ -3,11 +3,14 @@ package eu.midnightdust.motschen.rocks.block.blockentity;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.block.NetherGeyser;
import eu.midnightdust.motschen.rocks.config.RocksConfig;
import eu.midnightdust.motschen.rocks.util.ParticleUtil;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
public class NetherGeyserBlockEntity extends BlockEntity {
@@ -18,7 +21,7 @@ public class NetherGeyserBlockEntity extends BlockEntity {
}
public static void tick(World world, BlockPos pos, BlockState state, NetherGeyserBlockEntity blockEntity) {
assert world != null;
if (world == null || world.isClient) return;
if (world.getBlockState(pos).getBlock() == RocksMain.NetherGeyser) {
PlayerEntity player = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 3, true);
PlayerEntity player2 = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 1, true);
@@ -44,9 +47,11 @@ public class NetherGeyserBlockEntity extends BlockEntity {
}
if (state.get(NetherGeyser.ACTIVE)) {
world.addParticle(ParticleTypes.LAVA, pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5, 1, 1.5, 1);
world.addParticle(ParticleTypes.LAVA, pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5, 1, 1.5, 1);
world.addParticle(ParticleTypes.SMOKE, pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5, 0, 0.3, 0);
PlayerLookup.tracking(blockEntity).forEach(watchingPlayer -> {
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.LAVA, new Vec3d(pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5), new Vec3d(1, 1.5d, 1), 1);
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.LAVA, new Vec3d(pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5), new Vec3d(1, 1.5d, 1), 1);
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.SMOKE, new Vec3d(pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5), new Vec3d(0, 0.3, 0), 1);
});
}
}
}

View File

@@ -3,6 +3,8 @@ package eu.midnightdust.motschen.rocks.block.blockentity;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.block.OverworldGeyser;
import eu.midnightdust.motschen.rocks.config.RocksConfig;
import eu.midnightdust.motschen.rocks.util.ParticleUtil;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.minecraft.block.BlockState;
import net.minecraft.block.GrassBlock;
import net.minecraft.block.entity.BlockEntity;
@@ -12,6 +14,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.BlockStateRaycastContext;
import net.minecraft.world.World;
@@ -23,7 +26,7 @@ public class OverworldGeyserBlockEntity extends BlockEntity {
}
public static void tick(World world, BlockPos pos, BlockState state, OverworldGeyserBlockEntity blockEntity) {
assert world != null;
if (world == null || world.isClient) return;
if (world.getBlockState(pos).getBlock() == RocksMain.Geyser) {
PlayerEntity player = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 3, true);
PlayerEntity player2 = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 8, true);
@@ -46,9 +49,11 @@ public class OverworldGeyserBlockEntity extends BlockEntity {
}
if (state.get(OverworldGeyser.ACTIVE)) {
world.addParticle(ParticleTypes.SPIT, pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5, 0, 1.0, 0);
world.addParticle(ParticleTypes.SPIT, pos.getX() + 0.5, pos.getY() + 0.3, pos.getZ() + 0.5, 0, 1.0, 0);
world.addParticle(ParticleTypes.SPLASH, pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5, -0.01, 1.5, -0.01);
PlayerLookup.tracking(blockEntity).forEach(watchingPlayer -> {
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.SPIT, new Vec3d(pos.getX() + 0.5, pos.getY() + 0.1, pos.getZ() + 0.5), new Vec3d(0, 16.0, 0), 0.3f);
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.SPIT, new Vec3d(pos.getX() + 0.5, pos.getY() + 2.3, pos.getZ() + 0.5), new Vec3d(0, 64.0, 0), 0.1f);
ParticleUtil.spawnParticle(watchingPlayer, ParticleTypes.SPLASH, new Vec3d(pos.getX() + 0.5, pos.getY() + 1.0, pos.getZ() + 0.5), new Vec3d(-0.01, 16.5, -0.01), 0.3f);
});
}
}
}

View File

@@ -0,0 +1,15 @@
package eu.midnightdust.motschen.rocks.util;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.particle.ParticleType;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.Vec3d;
public class ParticleUtil {
public static void spawnParticle(ServerPlayerEntity player, ParticleType<?> type, Vec3d pos, Vec3d offset, float speed) {
ServerPlayNetworking.getSender(player).sendPacket(new ParticleS2CPacket((ParticleEffect) type, false, pos.x, pos.y, pos.z,
(float) offset.x / 16f, (float) offset.y / 16f, (float) offset.z / 16f, speed, 1));
}
}

View File

@@ -1,5 +1,6 @@
package eu.midnightdust.motschen.rocks;
package eu.midnightdust.motschen.rocks.util;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.blockstates.StarfishVariation;
import net.minecraft.block.Block;
import net.minecraft.component.ComponentMap;
@@ -8,17 +9,24 @@ import net.minecraft.component.type.BlockStateComponent;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.*;
import net.minecraft.registry.Registerable;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.PlacedFeature;
import static eu.midnightdust.motschen.rocks.RocksMain.STARFISH_VARIATION;
public class RocksRegistryUtils {
public class RegistryUtil {
public static void registerBlockWithItem(Identifier id, Block block) {
Registry.register(Registries.BLOCK, id, block);
registerItem(id, new BlockItem(block, new Item.Settings()));
registerItem(id, blockItem(block));
}
public static Item blockItem(Block block) {
return new BlockItem(block, new Item.Settings());
}
public static void registerItem(Identifier id, Item item) {
Registry.register(Registries.ITEM, id, item);

View File

@@ -15,7 +15,7 @@ import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.FeatureConfig;
import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
public class FeatureRegistry<FC extends FeatureConfig> {
public class FeatureRegistry {
public static final UnderwaterFeature UNDERWATER_STARFISH_FEATURE;
public static final UnderwaterFeature UNDERWATER_SEASHELL_FEATURE;

View File

@@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableList;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.blockstates.SeashellVariation;
import eu.midnightdust.motschen.rocks.blockstates.StarfishVariation;
import eu.midnightdust.motschen.rocks.config.RocksConfig;
import eu.midnightdust.motschen.rocks.world.FeatureRegistry;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
@@ -20,7 +19,7 @@ import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
import java.util.List;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.register;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.register;
public class MiscFeatures {
public static List<PlacementModifier> placementModifiers = List.of(RarityFilterPlacementModifier.of(1),

View File

@@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableList;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.blockstates.RockVariation;
import eu.midnightdust.motschen.rocks.blockstates.StickVariation;
import eu.midnightdust.motschen.rocks.config.RocksConfig;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.registry.Registerable;
@@ -18,7 +17,7 @@ import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
import java.util.List;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.register;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.register;
public class NetherFeatures {

View File

@@ -3,7 +3,6 @@ package eu.midnightdust.motschen.rocks.world.configured_feature;
import com.google.common.collect.ImmutableList;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.blockstates.RockVariation;
import eu.midnightdust.motschen.rocks.config.RocksConfig;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.registry.*;
@@ -17,7 +16,7 @@ import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
import java.util.List;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.register;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.register;
public class RockFeatures {
public static ConfiguredFeature<?, ?> ROCK_FEATURE = new ConfiguredFeature<>(Feature.SIMPLE_BLOCK, new SimpleBlockFeatureConfig(

View File

@@ -3,14 +3,12 @@ package eu.midnightdust.motschen.rocks.world.configured_feature;
import com.google.common.collect.ImmutableList;
import eu.midnightdust.motschen.rocks.RocksMain;
import eu.midnightdust.motschen.rocks.blockstates.StickVariation;
import eu.midnightdust.motschen.rocks.world.FeatureRegistry;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.registry.Registerable;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.util.collection.DataPool;
import net.minecraft.util.math.Vec3i;
import net.minecraft.world.gen.ProbabilityConfig;
import net.minecraft.world.gen.blockpredicate.BlockPredicate;
import net.minecraft.world.gen.feature.*;
import net.minecraft.world.gen.placementmodifier.*;
@@ -18,7 +16,7 @@ import net.minecraft.world.gen.stateprovider.WeightedBlockStateProvider;
import java.util.List;
import static eu.midnightdust.motschen.rocks.RocksRegistryUtils.register;
import static eu.midnightdust.motschen.rocks.util.RegistryUtil.register;
public class StickFeatures {
public static ConfiguredFeature<?, ?> OAK_STICK_FEATURE = new ConfiguredFeature<>(Feature.SIMPLE_BLOCK, new SimpleBlockFeatureConfig(