Skip to content

Commit

Permalink
allow world join
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Dec 15, 2024
1 parent 018a040 commit 5d45470
Show file tree
Hide file tree
Showing 20 changed files with 160 additions and 89 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
// 1.21.1 2024-12-15T18:00:23.932238647 Registries
0a7ae9820b3dbe262e0148956370a409905cc350 data/nautec/nautec/bacteria/empty.json
// 1.21.1 2024-12-15T18:27:58.792454857 Registries
f6cd1b2a46d878d0399641c842ea12405b436a46 data/nautec/nautec/bacteria/cyanobacteria.json
d4475a8b82f7770de97b81720473cecd8b4f2dbb data/nautec/nautec/bacteria/empty.json
8bfc9bad021aa0aee52f9819640710a350ffd15b data/nautec/nautec/bacteria/halobacteria.json
f81ad5565d1a950b307db7e27a5dc10b681d3cbe data/nautec/nautec/bacteria/methanogens.json
1269b3ea88b750bdc45f6d5a8b8e80368f075be0 data/nautec/nautec/bacteria/thermophiles.json
d3949aab832fc1b72c2512c35586c2682dea4d4d data/nautec/worldgen/configured_feature/prismarine_sand_beach.json
e9f0c0ce377bc6f731c3b36673e845152a53327d data/nautec/worldgen/configured_feature/prismarine_sand_ocean.json
685d14b2486e0da05c931e69fe78236dd9523cbf data/nautec/worldgen/placed_feature/prismarine_sand_beach.json
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "nautec:simple",
"id": "nautec:cyanobacteria",
"stats": {
"type": "minecraft:air",
"color": 0,
"growth_rate": 0.0,
"lifespan": 0,
"mutation_resistance": 0.0,
"production_rate": 0.0
}
}
10 changes: 5 additions & 5 deletions src/generated/resources/data/nautec/nautec/bacteria/empty.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
"id": "nautec:empty",
"stats": {
"type": "minecraft:air",
"color": -65281,
"growth_rate": 0.1,
"lifespan": 10,
"mutation_resistance": 2.0,
"production_rate": 1.0
"color": 0,
"growth_rate": 0.0,
"lifespan": 0,
"mutation_resistance": 0.0,
"production_rate": 0.0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "nautec:simple",
"id": "nautec:halobacteria",
"stats": {
"type": "minecraft:air",
"color": 0,
"growth_rate": 0.0,
"lifespan": 0,
"mutation_resistance": 0.0,
"production_rate": 0.0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "nautec:simple",
"id": "nautec:methanogens",
"stats": {
"type": "minecraft:air",
"color": 0,
"growth_rate": 0.0,
"lifespan": 0,
"mutation_resistance": 0.0,
"production_rate": 0.0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "nautec:simple",
"id": "nautec:thermophiles",
"stats": {
"type": "minecraft:air",
"color": 0,
"growth_rate": 0.0,
"lifespan": 0,
"mutation_resistance": 0.0,
"production_rate": 0.0
}
}
5 changes: 1 addition & 4 deletions src/main/java/com/portingdeadmods/nautec/Nautec.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,7 @@ private static void registerItemCaps(RegisterCapabilitiesEvent event) {
}

if (item instanceof IBacteriaItem) {
event.registerItem(NTCapabilities.BacteriaStorage.ITEM, (stack, ctx) -> stack.get(NTDataComponents.BACTERIA).isPresent()
? new ItemBacteriaWrapper(NTDataComponents.BACTERIA, stack)
: null,
item);
event.registerItem(NTCapabilities.BacteriaStorage.ITEM, (stack, ctx) -> new ItemBacteriaWrapper(NTDataComponents.BACTERIA, stack), item);
}

if (item instanceof ICurioItem curioItem) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.mojang.serialization.Codec;
import com.portingdeadmods.nautec.NTRegistries;
import com.portingdeadmods.nautec.content.bacteria.BacteriaStats;
import com.portingdeadmods.nautec.content.bacteria.SimpleBacteria;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
Expand All @@ -27,45 +29,4 @@ public interface Bacteria {
BacteriaStats stats();

BacteriaSerializer<?> getSerializer();

static Builder of() {
return new Builder();
}

class Builder {
private float growthRate;
private float mutationResistance;
private float productionRate;
private int lifespan;
private int color;

public Builder growthRate(float growthRate) {
this.growthRate = growthRate;
return this;
}

public Builder mutationResistance(float mutationResistance) {
this.mutationResistance = mutationResistance;
return this;
}

public Builder productionRate(float productionRate) {
this.productionRate = productionRate;
return this;
}

public Builder lifespan(int lifespan) {
this.lifespan = lifespan;
return this;
}

public Builder color(int color) {
this.color = color;
return this;
}

public Bacteria build(ResourceLocation location) {
return new SimpleBacteria(location, new BacteriaStats(Items.AIR, growthRate, mutationResistance, productionRate, lifespan, color));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,28 @@

import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.DataResult;
import com.portingdeadmods.nautec.NTRegistries;
import com.portingdeadmods.nautec.Nautec;
import com.portingdeadmods.nautec.api.bacteria.Bacteria;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceKey;
import net.neoforged.neoforge.common.util.INBTSerializable;
import org.jetbrains.annotations.UnknownNullability;

public class BacteriaStorage implements IBacteriaStorage, INBTSerializable<CompoundTag> {
private Bacteria bacteria;
private ResourceKey<Bacteria> bacteria;
private long bacteriaAmount;

@Override
public void setBacteria(Bacteria bacteria) {
public void setBacteria(ResourceKey<Bacteria> bacteria) {
this.bacteria = bacteria;
}

@Override
public Bacteria getBacteria() {
public ResourceKey<Bacteria> getBacteria() {
return this.bacteria;
}

Expand All @@ -39,7 +41,7 @@ public long getBacteriaAmount() {
public @UnknownNullability CompoundTag serializeNBT(HolderLookup.Provider provider) {
CompoundTag tag = new CompoundTag();
tag.putLong("bacteriaAmount", this.bacteriaAmount);
DataResult<Tag> tagDataResult = Bacteria.CODEC.encodeStart(NbtOps.INSTANCE, this.bacteria);
DataResult<Tag> tagDataResult = ResourceKey.codec(NTRegistries.BACTERIA_KEY).encodeStart(NbtOps.INSTANCE, this.bacteria);
if (tagDataResult.isSuccess()) {
tag.put("bacteriaType", tagDataResult.getOrThrow());
} else {
Expand All @@ -51,7 +53,7 @@ public long getBacteriaAmount() {
@Override
public void deserializeNBT(HolderLookup.Provider provider, CompoundTag nbt) {
this.bacteriaAmount = nbt.getLong("bacteriaAmount");
DataResult<Pair<Bacteria, Tag>> decodedBacteria = Bacteria.CODEC.decode(NbtOps.INSTANCE, nbt.get("bacteriaType"));
DataResult<Pair<ResourceKey<Bacteria>, Tag>> decodedBacteria = ResourceKey.codec(NTRegistries.BACTERIA_KEY).decode(NbtOps.INSTANCE, nbt.get("bacteriaType"));
if (decodedBacteria.isSuccess()) {
this.bacteria = decodedBacteria.result().get().getFirst();
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.portingdeadmods.nautec.capabilities.bacteria;

import com.portingdeadmods.nautec.api.bacteria.Bacteria;
import net.minecraft.resources.ResourceKey;

public interface IBacteriaStorage {
void setBacteria(Bacteria bacteria);
void setBacteria(ResourceKey<Bacteria> bacteria);

Bacteria getBacteria();
ResourceKey<Bacteria> getBacteria();

void setBacteriaAmount(long bacteriaAmount);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,30 @@
import com.portingdeadmods.nautec.api.bacteria.Bacteria;
import com.portingdeadmods.nautec.data.components.ComponentBacteriaStorage;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.ItemStack;

import java.util.Optional;
import java.util.function.Supplier;

public record ItemBacteriaWrapper(Supplier<DataComponentType<Optional<ComponentBacteriaStorage>>> componentType, ItemStack itemStack) implements IBacteriaStorage {
public record ItemBacteriaWrapper(Supplier<DataComponentType<ComponentBacteriaStorage>> componentType, ItemStack itemStack) implements IBacteriaStorage {
@Override
public void setBacteria(Bacteria bacteria) {
itemStack.set(componentType, Optional.of(new ComponentBacteriaStorage(bacteria, getBacteriaAmount())));
public void setBacteria(ResourceKey<Bacteria> bacteria) {
itemStack.set(componentType, new ComponentBacteriaStorage(bacteria, getBacteriaAmount()));
}

@Override
public Bacteria getBacteria() {
return itemStack.get(componentType).get().bacteria();
public ResourceKey<Bacteria> getBacteria() {
return itemStack.get(componentType).bacteria();
}

@Override
public void setBacteriaAmount(long bacteriaAmount) {
itemStack.set(componentType, Optional.of(new ComponentBacteriaStorage(getBacteria(), bacteriaAmount)));
itemStack.set(componentType, new ComponentBacteriaStorage(getBacteria(), bacteriaAmount));
}

@Override
public long getBacteriaAmount() {
return itemStack.get(componentType).get().bacteriaAmount();
return itemStack.get(componentType).bacteriaAmount();
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.portingdeadmods.nautec.api.bacteria;
package com.portingdeadmods.nautec.content.bacteria;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.portingdeadmods.nautec.Nautec;
import com.portingdeadmods.nautec.utils.codec.CodecUtils;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;

public record BacteriaStats(Item type,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
package com.portingdeadmods.nautec.api.bacteria;
package com.portingdeadmods.nautec.content.bacteria;

import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.portingdeadmods.nautec.api.bacteria.Bacteria;
import com.portingdeadmods.nautec.api.bacteria.BacteriaSerializer;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;

public record SimpleBacteria(ResourceLocation id, BacteriaStats stats) implements Bacteria {
public static Builder of() {
return new Builder();
}

@Override
public BacteriaSerializer<SimpleBacteria> getSerializer() {
return Serializer.INSTANCE;
Expand Down Expand Up @@ -39,4 +47,47 @@ public StreamCodec<RegistryFriendlyByteBuf, SimpleBacteria> streamCodec() {
return STREAM_CODEC;
}
}

public static class Builder {
private Item resource = Items.AIR;
private float growthRate;
private float mutationResistance;
private float productionRate;
private int lifespan;
private int color;

public Builder resource(Item resource) {
this.resource = resource;
return this;
}

public Builder growthRate(float growthRate) {
this.growthRate = growthRate;
return this;
}

public Builder mutationResistance(float mutationResistance) {
this.mutationResistance = mutationResistance;
return this;
}

public Builder productionRate(float productionRate) {
this.productionRate = productionRate;
return this;
}

public Builder lifespan(int lifespan) {
this.lifespan = lifespan;
return this;
}

public Builder color(int color) {
this.color = color;
return this;
}

public Bacteria build(ResourceLocation location) {
return new SimpleBacteria(location, new BacteriaStats(resource, growthRate, mutationResistance, productionRate, lifespan, color));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ public final class NTDataComponents {
() -> builder -> builder.persistent(ComponentPowerStorage.CODEC).networkSynchronized(ComponentPowerStorage.STREAM_CODEC));
public static final Supplier<DataComponentType<SimpleFluidContent>> FLUID = registerDataComponentType("fluid",
() -> builder -> builder.persistent(SimpleFluidContent.CODEC).networkSynchronized(SimpleFluidContent.STREAM_CODEC));
public static final Supplier<DataComponentType<Optional<ComponentBacteriaStorage>>> BACTERIA = registerDataComponentType("bacteria",
public static final Supplier<DataComponentType<ComponentBacteriaStorage>> BACTERIA = registerDataComponentType("bacteria",
() -> builder -> builder
.persistent(ComponentBacteriaStorage.CODEC.optionalFieldOf("bacteriaComponent").codec())
.networkSynchronized(ByteBufCodecs.optional(ComponentBacteriaStorage.STREAM_CODEC)));
.persistent(ComponentBacteriaStorage.CODEC)
.networkSynchronized(ComponentBacteriaStorage.STREAM_CODEC));
public static final Supplier<DataComponentType<Boolean>> OPEN = registerDataComponentType("open",
() -> builder -> builder.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.portingdeadmods.nautec.data;

import com.portingdeadmods.nautec.NTRegistries;
import com.portingdeadmods.nautec.registries.NTBacterias;
import com.portingdeadmods.nautec.utils.BacteriaHelper;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

public class NTDataComponentsUtils {

Expand All @@ -25,7 +29,7 @@ public static float isAbilityEnabledNBT(ItemStack stack) {
}

public static float hasBacteria(ItemStack stack) {
return stack.get(NTDataComponents.BACTERIA).isPresent() ? 1 : 0;
return stack.get(NTDataComponents.BACTERIA).bacteria() == NTBacterias.EMPTY ? 1 : 0;
}

public static void setInfusedStatus(ItemStack stack, Boolean value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceKey;

import java.util.Objects;
import java.util.function.Function;

public record ComponentBacteriaStorage(Bacteria bacteria, long bacteriaAmount) {
public static final Function<HolderLookup.Provider, ComponentBacteriaStorage> EMPTY =
lookup -> new ComponentBacteriaStorage(BacteriaHelper.getBacteria(lookup, NTBacterias.EMPTY), 0);
public record ComponentBacteriaStorage(ResourceKey<Bacteria> bacteria, long bacteriaAmount) {
public static final ComponentBacteriaStorage EMPTY = new ComponentBacteriaStorage(NTBacterias.EMPTY, 0);
public static final Codec<ComponentBacteriaStorage> CODEC = RecordCodecBuilder.create(instance -> instance.group(
Bacteria.CODEC.fieldOf("bacteriaType").forGetter(ComponentBacteriaStorage::bacteria),
ResourceKey.codec(NTRegistries.BACTERIA_KEY).fieldOf("bacteriaType").forGetter(ComponentBacteriaStorage::bacteria),
Codec.LONG.fieldOf("bacteriaAmount").forGetter(ComponentBacteriaStorage::bacteriaAmount)
).apply(instance, ComponentBacteriaStorage::new));
public static final StreamCodec<RegistryFriendlyByteBuf, ComponentBacteriaStorage> STREAM_CODEC = StreamCodec.composite(
Bacteria.STREAM_CODEC,
ResourceKey.streamCodec(NTRegistries.BACTERIA_KEY),
ComponentBacteriaStorage::bacteria,
ByteBufCodecs.VAR_LONG,
ComponentBacteriaStorage::bacteriaAmount,
Expand Down
Loading

0 comments on commit 5d45470

Please sign in to comment.