Skip to content

Commit 4a96970

Browse files
committed
Villager trades, village house generation
1 parent 4a6a804 commit 4a96970

File tree

20 files changed

+309
-148
lines changed

20 files changed

+309
-148
lines changed

src/generated/resources/data/minecraft/tags/point_of_interest_type/acquirable_job_site.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"values": [
33
{
4-
"id": "nuclearcraft:manufactory_poi",
4+
"id": "nuclearcraft:analyzer_poi",
55
"required": false
66
}
77
]

src/main/java/igentuman/nc/datagen/tags/PoiTypeTags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public PoiTypeTags(PackOutput pOutput, CompletableFuture<HolderLookup.Provider>
2020
@Override
2121
protected void addTags(HolderLookup.Provider pProvider) {
2222
tag(net.minecraft.tags.PoiTypeTags.ACQUIRABLE_JOB_SITE)
23-
.addOptional(rl("manufactory_poi"));
23+
.addOptional(rl("analyzer_poi"));
2424
}
2525
}

src/main/java/igentuman/nc/handler/event/server/WorldEvents.java

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import igentuman.nc.item.HazmatItem;
66
import igentuman.nc.multiblock.MultiblockHandler;
77
import igentuman.nc.radiation.data.RadiationEvents;
8+
import igentuman.nc.recipes.ingredient.creator.IngredientCreatorAccess;
89
import igentuman.nc.setup.registration.Villager;
910
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
1011
import net.minecraft.world.damagesource.DamageTypes;
@@ -33,10 +34,13 @@
3334
import java.util.List;
3435

3536
import static igentuman.nc.NuclearCraft.MODID;
37+
import static igentuman.nc.content.materials.Materials.*;
38+
import static igentuman.nc.setup.registration.FissionFuel.NC_FUEL;
3639
import static igentuman.nc.setup.registration.FissionFuel.NC_ISOTOPES;
3740
import static igentuman.nc.setup.registration.NCItems.*;
38-
import static net.minecraft.world.item.Items.EMERALD;
39-
import static net.minecraft.world.item.Items.SCULK;
41+
import static igentuman.nc.setup.registration.Tags.*;
42+
import static igentuman.nc.util.NcUtils.getItemStackByModPriority;
43+
import static net.minecraft.world.item.Items.*;
4044

4145
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.FORGE)
4246
public class WorldEvents {
@@ -54,23 +58,77 @@ public static void addCustomTrades(VillagerTradesEvent event) {
5458

5559
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
5660
new ItemStack(EMERALD, 1),
57-
new ItemStack(NC_DUSTS.get("graphite").get(), 1),
58-
32, 4, 0.02f));
61+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeDust("graphite"), 2)),
62+
32, 1, 0.02f));
5963

6064
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
61-
new ItemStack(NC_INGOTS.get("lead").get(), 12),
6265
new ItemStack(EMERALD, 1),
63-
24, 4, 0.02f));
66+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeDust("quartz"), 2)),
67+
32, 1, 0.02f));
68+
69+
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
70+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("lead"), 8)),
71+
new ItemStack(EMERALD, 1),
72+
24, 1, 0.02f));
6473

6574
trades.get(2).add((pTrader, pRandom) -> new MerchantOffer(
6675
new ItemStack(EMERALD, 6),
6776
new ItemStack(NC_PARTS.get("plate_basic").get(), 1),
68-
16, 8, 0.02f));
77+
16, 5, 0.02f));
78+
79+
trades.get(2).add((pTrader, pRandom) -> new MerchantOffer(
80+
new ItemStack(EMERALD, 9),
81+
new ItemStack(NC_FOOD.get("smore").get(), 1),
82+
16, 5, 0.02f));
6983

7084
trades.get(2).add((pTrader, pRandom) -> new MerchantOffer(
7185
new ItemStack(EMERALD, 8),
7286
new ItemStack(NC_FOOD.get("radaway").get(), 1),
73-
4, 8, 0.02f));
87+
6, 5, 0.02f));
88+
89+
trades.get(3).add((pTrader, pRandom) -> new MerchantOffer(
90+
new ItemStack(NC_ISOTOPES.get(neptunium236).get(), 1),
91+
new ItemStack(EMERALD, 4),
92+
7, 15, 0.02f));
93+
94+
trades.get(3).add((pTrader, pRandom) -> new MerchantOffer(
95+
new ItemStack(EMERALD, 32),
96+
new ItemStack(NC_ISOTOPES.get(plutonium238).get(), 2),
97+
7, 15, 0.02f));
98+
99+
trades.get(3).add((pTrader, pRandom) -> new MerchantOffer(
100+
new ItemStack(EMERALD, 20),
101+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeDust("calcium_sulfate"), 2)),
102+
7, 15, 0.02f));
103+
104+
trades.get(4).add((pTrader, pRandom) -> new MerchantOffer(
105+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgePlate("platinum"), 16)),
106+
new ItemStack(NC_PARTS.get("plate_elite").get(), 1),
107+
7, 20, 0.02f));
108+
109+
trades.get(4).add((pTrader, pRandom) -> new MerchantOffer(
110+
new ItemStack(EMERALD, 32),
111+
new ItemStack(BOOK, 4),
112+
new ItemStack(NC_FUEL.get(List.of("fuel", "californium", "hecf-251", "")).get(), 2),
113+
7, 20, 0.02f));
114+
115+
trades.get(4).add((pTrader, pRandom) -> new MerchantOffer(
116+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("platinum"), 16)),
117+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("cobalt"), 4)),
118+
new ItemStack(NC_FUEL.get(List.of("fuel", "americium", "hea-242", "")).get(), 2),
119+
7, 20, 0.02f));
120+
121+
trades.get(5).add((pTrader, pRandom) -> new MerchantOffer(
122+
new ItemStack(EMERALD, 16),
123+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("cobalt"), 4)),
124+
new ItemStack(NC_PARTS.get("coil_magnesium_diboride").get(), 2),
125+
7, 30, 0.02f));
126+
127+
trades.get(5).add((pTrader, pRandom) -> new MerchantOffer(
128+
new ItemStack(EMERALD, 16),
129+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("zinc"), 8)),
130+
getItemStackByModPriority(IngredientCreatorAccess.item().from(forgeIngot("neutronium"), 2)),
131+
7, 30, 0.02f));
74132
}
75133
}
76134

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package igentuman.nc.mixin;
2+
3+
import com.mojang.datafixers.util.Pair;
4+
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
5+
import java.util.List;
6+
import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement;
7+
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Mutable;
11+
import org.spongepowered.asm.mixin.gen.Accessor;
12+
13+
@Mixin({StructureTemplatePool.class})
14+
public interface TemplatePoolAccess {
15+
@Accessor
16+
List<Pair<StructurePoolElement, Integer>> getRawTemplates();
17+
18+
@Accessor
19+
@Final
20+
@Mutable
21+
void setRawTemplates(List<Pair<StructurePoolElement, Integer>> var1);
22+
23+
@Accessor
24+
ObjectArrayList<StructurePoolElement> getTemplates();
25+
}

src/main/java/igentuman/nc/setup/ModSetup.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import igentuman.nc.setup.registration.GameEvents;
88
import igentuman.nc.util.insitu_leaching.WorldVeinsProvider;
99
import igentuman.nc.world.dimension.Dimensions;
10+
import igentuman.nc.world.structure.ScientistHouseStructure;
1011
import net.minecraft.world.entity.Entity;
1112
import net.minecraft.world.level.Level;
1213
import net.minecraftforge.common.MinecraftForge;
@@ -26,12 +27,12 @@ public static void setup() {
2627
bus.addGenericListener(Level.class, WorldVeinsProvider::attachVeinCapability);
2728
bus.register(NuclearCraft.worldTickHandler);
2829
bus.register(new RadiationEvents());
30+
bus.register(new ScientistHouseStructure());
2931
}
3032

3133
public static void init(FMLCommonSetupEvent event) {
3234
event.enqueueWork(() -> {
3335
//Dimensions.register();
34-
//CapabilityRegistration.register(event);
3536
GameEvents.commonSetup();
3637
});
3738
NuclearCraft.packetHandler().initialize();

src/main/java/igentuman/nc/setup/Registration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import igentuman.nc.recipes.NcRecipeSerializers;
1010
import igentuman.nc.recipes.NcRecipeType;
1111
import igentuman.nc.setup.registration.*;
12-
import igentuman.nc.world.structure.LaboratoryStructure;
12+
import igentuman.nc.world.structure.ScientistHouseStructure;
1313
import igentuman.nc.world.structure.PortalStructure;
1414
import net.minecraft.world.effect.MobEffect;
1515
import net.minecraft.world.effect.MobEffectCategory;
@@ -51,8 +51,6 @@ public static void init() {
5151

5252
public static final RegistryObject<StructureType<?>> PORTAL = STRUCTURES.register("portal", () -> typeConvert(PortalStructure.CODEC));
5353

54-
public static final RegistryObject<StructureType<?>> LABORATORY = STRUCTURES.register("nc_laboratory", () -> typeConvert(LaboratoryStructure.CODEC));
55-
5654
private static <S extends Structure> StructureType<S> typeConvert(Codec<S> codec) {
5755
return () -> codec;
5856
}

src/main/java/igentuman/nc/setup/registration/Villager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import net.minecraftforge.registries.RegistryObject;
1212

1313
import static igentuman.nc.NuclearCraft.MODID;
14-
import static igentuman.nc.content.processors.Processors.MANUFACTORY;
14+
import static igentuman.nc.content.processors.Processors.ANALYZER;
1515
import static igentuman.nc.setup.registration.NCProcessors.PROCESSORS;
1616

1717
public class Villager {
@@ -20,13 +20,13 @@ public class Villager {
2020
public static final DeferredRegister<VillagerProfession> VILLAGER_PROFESSIONS =
2121
DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, MODID);
2222

23-
public static final RegistryObject<PoiType> MANUFACTORY_POI = POI_TYPES.register("manufactory_poi",
24-
() -> new PoiType(ImmutableSet.copyOf(PROCESSORS.get(MANUFACTORY).get().getStateDefinition().getPossibleStates()),
23+
public static final RegistryObject<PoiType> ANALYZER_POI = POI_TYPES.register("analyzer_poi",
24+
() -> new PoiType(ImmutableSet.copyOf(PROCESSORS.get(ANALYZER).get().getStateDefinition().getPossibleStates()),
2525
1, 1));
2626

2727
public static final RegistryObject<VillagerProfession> NUCLEAR_SCIENTIST =
2828
VILLAGER_PROFESSIONS.register("nuclear_scientist", () -> new VillagerProfession("nuclear_scientist",
29-
holder -> holder.get() == MANUFACTORY_POI.get(), holder -> holder.get() == MANUFACTORY_POI.get(),
29+
holder -> holder.get() == ANALYZER_POI.get(), holder -> holder.get() == ANALYZER_POI.get(),
3030
ImmutableSet.of(), ImmutableSet.of(), SoundEvents.VILLAGER_WORK_LIBRARIAN));
3131

3232
public static void init() {

src/main/java/igentuman/nc/setup/registration/WorldGeneration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class WorldGeneration {
3636
public static final RegistryObject<PlacementModifierType<?>> VEGETATION_MODIFIER =
3737
PLACEMENT_MODIFIERS.register("nc_vegetation_modifier", () -> placement(BiomeFilterNether.CODEC));
3838

39+
3940
private static ResourceKey<Biome> makeKey(String name) {
4041
return ResourceKey.create(Registries.BIOME, rl(name));
4142
}
@@ -59,7 +60,6 @@ public static void init() {
5960
}
6061

6162
public static class StructureLoader {
62-
private static final String STRUCTURE_PATH = ":structures/fission_reactor";
6363

6464
public static StructureTemplate loadStructure(ServerLevel level, ResourceLocation structureLocation) {
6565
StructureTemplateManager manager = level.getStructureManager();

src/main/java/igentuman/nc/util/NcUtils.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.gson.JsonElement;
55
import com.google.gson.JsonObject;
66
import igentuman.nc.NuclearCraft;
7+
import igentuman.nc.recipes.ingredient.ItemStackIngredient;
78
import igentuman.nc.util.math.FloatingLong;
89
import net.minecraft.core.particles.ParticleType;
910
import net.minecraft.resources.ResourceLocation;
@@ -27,6 +28,8 @@
2728

2829
import java.util.*;
2930

31+
import static igentuman.nc.NuclearCraft.debugLog;
32+
import static igentuman.nc.handler.config.MaterialsConfig.MATERIAL_PRODUCTS;
3033
import static igentuman.nc.multiblock.fission.FissionReactor.FISSION_BLOCKS;
3134
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_BLOCKS;
3235
import static igentuman.nc.multiblock.turbine.TurbineRegistration.TURBINE_BLOCKS;
@@ -78,19 +81,39 @@ public static ResourceLocation getName(MenuType<?> element) {
7881
*/
7982
@NotNull
8083
public static String getModId(@NotNull ItemStack stack) {
84+
try {
85+
String mod = stack.getItemHolder().unwrap().left().get().location().getNamespace();
86+
if (mod != null && !mod.isEmpty()) {
87+
return mod;
88+
}
89+
} catch (Exception ignored) {}
8190
Item item = stack.getItem();
8291
String modid = item.getCreatorModId(stack);
8392
if (modid == null) {
8493
ResourceLocation registryName = getName(item);
8594
if (registryName == null) {
86-
NuclearCraft.LOGGER.error("Unexpected null registry name for item of class type: {}", item.getClass().getSimpleName());
95+
debugLog("Unexpected null registry name for item of class type: {}" + item.getClass().getSimpleName());
8796
return "";
8897
}
8998
return registryName.getNamespace();
9099
}
91100
return modid;
92101
}
93102

103+
public static ItemStack getItemStackByModPriority(ItemStackIngredient item) {
104+
if(item.getRepresentations().size() == 1) {
105+
return item.getRepresentations().get(0);
106+
}
107+
for(String mod: MATERIAL_PRODUCTS.MODS_PRIORITY.get()) {
108+
for(ItemStack i: item.getRepresentations()) {
109+
if(getModId(i).equals(mod)) {
110+
return i;
111+
}
112+
}
113+
}
114+
return item.getRepresentations().get(0);
115+
}
116+
94117
@NotNull
95118
public static String getModId(@NotNull FluidStack stack) {
96119
Fluid fluid = stack.getFluid();

0 commit comments

Comments
 (0)