From d7af5ef4bb60434a494c0a1f936f2b8190304469 Mon Sep 17 00:00:00 2001 From: lcy0x1 Date: Wed, 23 Oct 2024 09:01:11 +0800 Subject: [PATCH] prepare for l2h --- gradle.properties | 2 +- .../base/worldgen/ConfigChancePlacement.java | 37 ++++++++++++++++++ .../base/worldgen/ConfigRarityFilter.java | 39 +++++++++++++++++++ .../l2core/base/worldgen/package-info.java | 8 ++++ .../l2core/events/BaseCapabilityEvents.java | 15 +++---- .../events/ClientEffectRenderEvents.java | 4 ++ .../java/dev/xkmc/l2core/init/L2LibReg.java | 7 ++++ .../xkmc/l2core/init/reg/simple/AttReg.java | 5 ++- .../xkmc/l2core/init/reg/simple/AttVal.java | 3 +- 9 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 src/main/java/dev/xkmc/l2core/base/worldgen/ConfigChancePlacement.java create mode 100644 src/main/java/dev/xkmc/l2core/base/worldgen/ConfigRarityFilter.java create mode 100644 src/main/java/dev/xkmc/l2core/base/worldgen/package-info.java diff --git a/gradle.properties b/gradle.properties index b809db9..ace6cf0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.7+45 +mod_version=3.0.8+1 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods diff --git a/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigChancePlacement.java b/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigChancePlacement.java new file mode 100644 index 0000000..ca73cdd --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigChancePlacement.java @@ -0,0 +1,37 @@ + +package dev.xkmc.l2core.base.worldgen; + +import com.mojang.serialization.MapCodec; +import dev.xkmc.l2core.init.L2LibReg; +import dev.xkmc.l2core.serial.configval.DoubleConfigValue; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.levelgen.placement.PlacementModifierType; +import net.minecraft.world.level.levelgen.placement.RepeatingPlacement; + +import java.util.function.DoubleSupplier; + +public class ConfigChancePlacement extends RepeatingPlacement { + public static final MapCodec CODEC = DoubleConfigValue.CODEC.fieldOf("chance").xmap(ConfigChancePlacement::new, e -> e.chance); + private final DoubleSupplier chance; + + private ConfigChancePlacement(DoubleSupplier chance) { + this.chance = chance; + } + + public static ConfigChancePlacement of(DoubleSupplier count) { + return new ConfigChancePlacement(count); + } + + @Override + protected int count(RandomSource random, BlockPos pos) { + double val = chance.getAsDouble(); + int ans = (int) val; + return ans + (random.nextFloat() < val - ans ? 1 : 0); + } + + @Override + public PlacementModifierType type() { + return L2LibReg.PM_CHANCE.get(); + } +} diff --git a/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigRarityFilter.java b/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigRarityFilter.java new file mode 100644 index 0000000..6e8efd8 --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/base/worldgen/ConfigRarityFilter.java @@ -0,0 +1,39 @@ + +package dev.xkmc.l2core.base.worldgen; + +import com.mojang.serialization.MapCodec; +import dev.xkmc.l2core.init.L2LibReg; +import dev.xkmc.l2core.serial.configval.DoubleConfigValue; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.levelgen.placement.PlacementContext; +import net.minecraft.world.level.levelgen.placement.PlacementFilter; +import net.minecraft.world.level.levelgen.placement.PlacementModifierType; + +import java.util.function.DoubleSupplier; + +public class ConfigRarityFilter extends PlacementFilter { + + public static final MapCodec CODEC = + DoubleConfigValue.CODEC.fieldOf("chance").xmap(ConfigRarityFilter::new, e -> e.chance); + + private final DoubleSupplier chance; + + private ConfigRarityFilter(DoubleSupplier chance) { + this.chance = chance; + } + + public static ConfigRarityFilter of(DoubleSupplier chance) { + return new ConfigRarityFilter(chance); + } + + @Override + protected boolean shouldPlace(PlacementContext context, RandomSource random, BlockPos pos) { + return random.nextFloat() < this.chance.getAsDouble(); + } + + @Override + public PlacementModifierType type() { + return L2LibReg.PM_RARITY.get(); + } +} diff --git a/src/main/java/dev/xkmc/l2core/base/worldgen/package-info.java b/src/main/java/dev/xkmc/l2core/base/worldgen/package-info.java new file mode 100644 index 0000000..11c60c5 --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/base/worldgen/package-info.java @@ -0,0 +1,8 @@ +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault + +package dev.xkmc.l2core.base.worldgen; + +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/dev/xkmc/l2core/events/BaseCapabilityEvents.java b/src/main/java/dev/xkmc/l2core/events/BaseCapabilityEvents.java index 86244af..c261529 100644 --- a/src/main/java/dev/xkmc/l2core/events/BaseCapabilityEvents.java +++ b/src/main/java/dev/xkmc/l2core/events/BaseCapabilityEvents.java @@ -1,28 +1,23 @@ package dev.xkmc.l2core.events; -import dev.xkmc.l2core.capability.attachment.GeneralCapabilityHolder; import dev.xkmc.l2core.capability.player.PlayerCapabilityHolder; import dev.xkmc.l2core.init.L2Core; -import dev.xkmc.l2serial.util.Wrappers; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.LivingEntity; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.entity.player.PlayerEvent; -import net.neoforged.neoforge.event.tick.EntityTickEvent; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; @EventBusSubscriber(modid = L2Core.MODID, bus = EventBusSubscriber.Bus.GAME) public class BaseCapabilityEvents { @SubscribeEvent - public static void onLivingTick(EntityTickEvent.Post event) { - if (event.getEntity() instanceof LivingEntity le && le.isAlive()) { - for (GeneralCapabilityHolder holder : GeneralCapabilityHolder.INTERNAL_MAP.values()) { - if (holder.isFor(event.getEntity())) - holder.getOrCreate(Wrappers.cast(event.getEntity())).tick(Wrappers.cast(event.getEntity())); + public static void onPlayerTick(PlayerTickEvent.Post event) { + if (event.getEntity().isAlive()) + for (PlayerCapabilityHolder holder : PlayerCapabilityHolder.INTERNAL_MAP.values()) { + holder.getOrCreate(event.getEntity()).tick(event.getEntity()); } - } } @SubscribeEvent(priority = EventPriority.LOW) diff --git a/src/main/java/dev/xkmc/l2core/events/ClientEffectRenderEvents.java b/src/main/java/dev/xkmc/l2core/events/ClientEffectRenderEvents.java index 26ad3ba..30096c7 100644 --- a/src/main/java/dev/xkmc/l2core/events/ClientEffectRenderEvents.java +++ b/src/main/java/dev/xkmc/l2core/events/ClientEffectRenderEvents.java @@ -76,6 +76,10 @@ public class ClientEffectRenderEvents { .createCompositeState(false) )); + public static RenderType get2DIcon(ResourceLocation id) { + return ICON_TYPE.apply(id); + } + @SubscribeEvent public static void levelRenderLast(RenderLevelStageEvent event) { if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_WEATHER) return; diff --git a/src/main/java/dev/xkmc/l2core/init/L2LibReg.java b/src/main/java/dev/xkmc/l2core/init/L2LibReg.java index b9c9e6a..36a4eed 100644 --- a/src/main/java/dev/xkmc/l2core/init/L2LibReg.java +++ b/src/main/java/dev/xkmc/l2core/init/L2LibReg.java @@ -2,6 +2,8 @@ package dev.xkmc.l2core.init; import dev.xkmc.l2core.base.effects.ClientEffectCap; import dev.xkmc.l2core.base.menu.base.MenuLayoutConfig; +import dev.xkmc.l2core.base.worldgen.ConfigChancePlacement; +import dev.xkmc.l2core.base.worldgen.ConfigRarityFilter; import dev.xkmc.l2core.capability.conditionals.ConditionalData; import dev.xkmc.l2core.capability.conditionals.PlayerFlagData; import dev.xkmc.l2core.capability.player.PlayerCapabilityNetworkHandler; @@ -21,6 +23,7 @@ import dev.xkmc.l2core.serial.loot.PlayerFlagCondition; import dev.xkmc.l2serial.serialization.codec.MapCodecAdaptor; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.levelgen.placement.PlacementModifierType; import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; import net.neoforged.neoforge.common.conditions.ICondition; import net.neoforged.neoforge.common.loot.IGlobalLootModifier; @@ -73,6 +76,10 @@ public class L2LibReg { public static final EECVal.Special COLOR = ENCH_REG.special("color", EnchColor.CODEC); public static final EECVal.Special LEGACY = ENCH_REG.special("legacy", ENCH.reg().byNameCodec()); + public static final SR> PM = SR.of(REG, BuiltInRegistries.PLACEMENT_MODIFIER_TYPE); + public static final Val> PM_RARITY = PM.reg("rarity", () -> () -> ConfigRarityFilter.CODEC); + public static final Val> PM_CHANCE = PM.reg("chance", () -> () -> ConfigChancePlacement.CODEC); + public static void register() { } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/AttReg.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/AttReg.java index fca8f3b..88e8d6c 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/AttReg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/AttReg.java @@ -8,6 +8,7 @@ import dev.xkmc.l2core.capability.player.PlayerCapabilityTemplate; import net.minecraft.resources.ResourceLocation; import net.neoforged.neoforge.attachment.AttachmentHolder; import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.attachment.IAttachmentHolder; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.NeoForgeRegistries; @@ -32,7 +33,7 @@ public record AttReg(DeferredRegister> att) { return reg(id, type); } - public , H extends AttachmentHolder> AttVal.CapVal + public , H extends IAttachmentHolder> AttVal.CapVal entity(String id, Class holder_class, Supplier sup, Class entity_class, Predicate pred) { ResourceLocation rl = ResourceLocation.fromNamespaceAndPath(att.getNamespace(), id); var type = new GeneralCapabilityHolder<>(rl, holder_class, sup, entity_class, pred); @@ -62,7 +63,7 @@ public record AttReg(DeferredRegister> att) { } - private record CapValImpl>( + private record CapValImpl>( DeferredHolder, AttachmentType> val, GeneralCapabilityHolder type ) implements AttVal.CapVal { diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/AttVal.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/AttVal.java index dc47c58..a4c8173 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/AttVal.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/AttVal.java @@ -7,12 +7,13 @@ import dev.xkmc.l2core.capability.player.PlayerCapabilityHolder; import dev.xkmc.l2core.capability.player.PlayerCapabilityTemplate; import net.neoforged.neoforge.attachment.AttachmentHolder; import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.attachment.IAttachmentHolder; public interface AttVal> extends Val> { H type(); - interface CapVal> + interface CapVal> extends AttVal> { }