prepare for l2h

This commit is contained in:
lcy0x1
2024-10-23 09:01:11 +08:00
parent 21bff77a28
commit d7af5ef4bb
9 changed files with 106 additions and 14 deletions

View File

@@ -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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
package dev.xkmc.l2core.base.worldgen;
import net.minecraft.MethodsReturnNonnullByDefault;
import javax.annotation.ParametersAreNonnullByDefault;

View File

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

View File

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

View File

@@ -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<EnchColor> COLOR = ENCH_REG.special("color", EnchColor.CODEC);
public static final EECVal.Special<LegacyEnchantment> LEGACY = ENCH_REG.special("legacy", ENCH.reg().byNameCodec());
public static final SR<PlacementModifierType<?>> PM = SR.of(REG, BuiltInRegistries.PLACEMENT_MODIFIER_TYPE);
public static final Val<PlacementModifierType<ConfigRarityFilter>> PM_RARITY = PM.reg("rarity", () -> () -> ConfigRarityFilter.CODEC);
public static final Val<PlacementModifierType<ConfigChancePlacement>> PM_CHANCE = PM.reg("chance", () -> () -> ConfigChancePlacement.CODEC);
public static void register() {
}

View File

@@ -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<AttachmentType<?>> att) {
return reg(id, type);
}
public <E extends GeneralCapabilityTemplate<H, E>, H extends AttachmentHolder> AttVal.CapVal<H, E>
public <E extends GeneralCapabilityTemplate<H, E>, H extends IAttachmentHolder> AttVal.CapVal<H, E>
entity(String id, Class<E> holder_class, Supplier<E> sup, Class<H> entity_class, Predicate<H> 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<AttachmentType<?>> att) {
}
private record CapValImpl<E extends AttachmentHolder, T extends GeneralCapabilityTemplate<E, T>>(
private record CapValImpl<E extends IAttachmentHolder, T extends GeneralCapabilityTemplate<E, T>>(
DeferredHolder<AttachmentType<?>, AttachmentType<T>> val, GeneralCapabilityHolder<E, T> type
) implements AttVal.CapVal<E, T> {

View File

@@ -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<T, H extends AttachmentDef<T>> extends Val<AttachmentType<T>> {
H type();
interface CapVal<E extends AttachmentHolder, T extends GeneralCapabilityTemplate<E, T>>
interface CapVal<E extends IAttachmentHolder, T extends GeneralCapabilityTemplate<E, T>>
extends AttVal<T, GeneralCapabilityHolder<E, T>> {
}