Skip to content

Commit fb9aaa3

Browse files
committed
Add helpers for registering to structure template pools
Required for CyclopsMC/EvilCraft#1146
1 parent 5d05104 commit fb9aaa3

10 files changed

Lines changed: 115 additions & 1 deletion

File tree

loader-common/src/main/java/org/cyclops/cyclopscore/helper/IModHelpers.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,6 @@ public static IModHelpers get() {
4040

4141
public IGuiHelpers getGuiHelpers();
4242

43+
public IStructureHelpers getStructureHelpers();
44+
4345
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.cyclops.cyclopscore.helper;
2+
3+
import net.minecraft.core.RegistryAccess;
4+
import net.minecraft.resources.ResourceLocation;
5+
6+
/**
7+
* @author rubensworks
8+
*/
9+
public interface IStructureHelpers {
10+
11+
/**
12+
* Add the given structure template to a pool.
13+
* @param structureTemplatePool A pool.
14+
* @param structureTemplate The template to add.
15+
* @param registryAccess A registry access.
16+
*/
17+
public void addToStructureTemplatePool(ResourceLocation structureTemplatePool, ResourceLocation structureTemplate, RegistryAccess registryAccess);
18+
19+
}

loader-common/src/main/java/org/cyclops/cyclopscore/helper/ModHelpersCommon.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public abstract class ModHelpersCommon implements IModHelpers {
1616
private ICraftingHelpers craftingHelpers;
1717
private IWorldHelpers worldHelpers;
1818
private IGuiHelpers guiHelpers;
19+
private IStructureHelpers structureHelpers;
1920

2021
protected ModHelpersCommon() {
2122
this.initializeHelpers();
@@ -39,6 +40,7 @@ protected void initializeHelpers() {
3940
this.baseHelpers = new BaseHelpersCommon();
4041
this.craftingHelpers = new CraftingHelpersCommon(this);
4142
this.worldHelpers = new WorldHelpersCommon(this);
43+
this.structureHelpers = new StructureHelpersCommon();
4244
}
4345

4446
@Override
@@ -95,4 +97,9 @@ public IWorldHelpers getWorldHelpers() {
9597
public IGuiHelpers getGuiHelpers() {
9698
return this.guiHelpers;
9799
}
100+
101+
@Override
102+
public IStructureHelpers getStructureHelpers() {
103+
return this.structureHelpers;
104+
}
98105
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.cyclops.cyclopscore.helper;
2+
3+
import com.mojang.datafixers.util.Pair;
4+
import net.minecraft.core.Registry;
5+
import net.minecraft.core.RegistryAccess;
6+
import net.minecraft.core.registries.Registries;
7+
import net.minecraft.resources.ResourceLocation;
8+
import net.minecraft.world.level.levelgen.structure.pools.SinglePoolElement;
9+
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
10+
11+
import java.util.ArrayList;
12+
import java.util.Objects;
13+
14+
/**
15+
* @author rubensworks
16+
*/
17+
public class StructureHelpersCommon implements IStructureHelpers {
18+
@Override
19+
public void addToStructureTemplatePool(ResourceLocation structureTemplatePool, ResourceLocation structureTemplate, RegistryAccess registryAccess) {
20+
Registry<StructureTemplatePool> registry = registryAccess.registryOrThrow(Registries.TEMPLATE_POOL);
21+
StructureTemplatePool pool = Objects.requireNonNull(registry.get(structureTemplatePool), structureTemplatePool.getPath());
22+
if(!(pool.rawTemplates instanceof ArrayList)) {
23+
pool.rawTemplates = new ArrayList<>(pool.rawTemplates);
24+
}
25+
SinglePoolElement addedElement = SinglePoolElement.single(structureTemplate.toString()).apply(StructureTemplatePool.Projection.RIGID);
26+
pool.rawTemplates.add(Pair.of(addedElement, 1));
27+
pool.templates.add(addedElement);
28+
}
29+
}

loader-common/src/main/resources/META-INF/accesstransformer.cfg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,9 @@ public net.minecraft.client.renderer.texture.AbstractTexture blur
110110
public net.minecraft.client.renderer.texture.AbstractTexture f_117951_ # blur
111111
public net.minecraft.client.renderer.texture.AbstractTexture mipmap
112112
public net.minecraft.client.renderer.texture.AbstractTexture f_117952_ # mipmap
113+
114+
# Structures
115+
public-f net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool rawTemplates
116+
public-f net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool f_210559_ # rawTemplates
117+
public net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool templates
118+
public net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool f_210560_ # templates

loader-common/src/main/resources/cyclopscore.accesswidener

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,9 @@ accessible field net/minecraft/client/particle/ParticleEngine textureManager Lne
5454

5555
# Rendering
5656
accessible field net/minecraft/client/renderer/texture/AbstractTexture blur Z
57-
accessible field net/minecraft/client/renderer/texture/AbstractTexture mipmap Z
57+
accessible field net/minecraft/client/renderer/texture/AbstractTexture mipmap Z
58+
59+
# Structures
60+
accessible field net/minecraft/world/level/levelgen/structure/pools/StructureTemplatePool rawTemplates Ljava/util/List;
61+
mutable field net/minecraft/world/level/levelgen/structure/pools/StructureTemplatePool rawTemplates Ljava/util/List;
62+
accessible field net/minecraft/world/level/levelgen/structure/pools/StructureTemplatePool templates Lit/unimi/dsi/fastutil/objects/ObjectArrayList;

loader-neoforge/src/main/java/org/cyclops/cyclopscore/helper/IModHelpersNeoForge.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ public static IModHelpersNeoForge get() {
2020

2121
public IGuiHelpersNeoForge getGuiHelpers();
2222

23+
public IStructureHelpersNeoForge getStructureHelpers();
24+
2325
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.cyclops.cyclopscore.helper;
2+
3+
import net.minecraft.resources.ResourceLocation;
4+
5+
/**
6+
* @author rubensworks
7+
*/
8+
public interface IStructureHelpersNeoForge extends IStructureHelpers {
9+
10+
/**
11+
* Add the given structure template to a pool.
12+
* @param structureTemplatePool A pool.
13+
* @param structureTemplate The template to add.
14+
*/
15+
public void addToStructureTemplatePool(ResourceLocation structureTemplatePool, ResourceLocation structureTemplate);
16+
17+
}

loader-neoforge/src/main/java/org/cyclops/cyclopscore/helper/ModHelpersNeoForge.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class ModHelpersNeoForge extends ModHelpersCommon implements IModHelpersN
1414
private IRenderHelpersNeoForge renderHelpers;
1515
private IRegistrationHelpers registrationHelpers;
1616
private IGuiHelpersNeoForge guiHelpers;
17+
private IStructureHelpersNeoForge structureHelpers;
1718

1819
private ModHelpersNeoForge() {}
1920

@@ -32,6 +33,7 @@ protected void initializeHelpers() {
3233
this.capabilityHelpers = new CapabilityHelpersNeoForge(this);
3334
this.fluidHelpers = new FluidHelpersNeoForge();
3435
this.registrationHelpers = new RegistrationHelpersNeoForge();
36+
this.structureHelpers = new StructureHelpersNeoForge();
3537
}
3638

3739
@Override
@@ -68,4 +70,9 @@ public IRegistrationHelpers getRegistrationHelpers() {
6870
public IGuiHelpersNeoForge getGuiHelpers() {
6971
return this.guiHelpers;
7072
}
73+
74+
@Override
75+
public IStructureHelpersNeoForge getStructureHelpers() {
76+
return this.structureHelpers;
77+
}
7178
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.cyclops.cyclopscore.helper;
2+
3+
import net.minecraft.resources.ResourceLocation;
4+
import net.neoforged.neoforge.common.NeoForge;
5+
import net.neoforged.neoforge.event.TagsUpdatedEvent;
6+
7+
/**
8+
* @author rubensworks
9+
*/
10+
public class StructureHelpersNeoForge extends StructureHelpersCommon implements IStructureHelpersNeoForge {
11+
12+
@Override
13+
public void addToStructureTemplatePool(ResourceLocation structureTemplatePool, ResourceLocation structureTemplate) {
14+
NeoForge.EVENT_BUS.addListener((TagsUpdatedEvent event) -> {
15+
if (event.getUpdateCause() == TagsUpdatedEvent.UpdateCause.SERVER_DATA_LOAD) {
16+
addToStructureTemplatePool(structureTemplatePool, structureTemplate, event.getRegistryAccess());
17+
}
18+
});
19+
}
20+
}

0 commit comments

Comments
 (0)