Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,5 @@ runs

# Files from Forge MDK
forge*changelog.txt

.vscode
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ idea {

jar {
//classifier 'slim'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
afterEvaluate {
configurations.shade.each { dep ->
from(project.zipTree(dep)) {
Expand Down
24 changes: 17 additions & 7 deletions src/main/java/com/github/alexthe666/citadel/Citadel.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
import java.util.function.Supplier;

@Mod("citadel")
@EventBusSubscriber
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
public class Citadel {
public static final Logger LOGGER = LogManager.getLogger("citadel");
private static final String PROTOCOL_VERSION = Integer.toString(1);
Expand Down Expand Up @@ -78,9 +78,14 @@ public Citadel(ModContainer modContainer, IEventBus bus) {
final DeferredRegister<MapCodec<? extends BiomeModifier>> serializers = DeferredRegister.create(NeoForgeRegistries.BIOME_MODIFIER_SERIALIZERS, "citadel");
serializers.register(bus);
serializers.register("mob_spawn_probability", SpawnProbabilityModifier::makeCodec);
NeoForge.EVENT_BUS.register(PROXY);
// Only register ClientProxy to event bus - ServerProxy has no @SubscribeEvent methods
if (FMLEnvironment.dist.isClient()) {
NeoForge.EVENT_BUS.register(PROXY);
}
modContainer.registerConfig(ModConfig.Type.COMMON, ConfigHolder.SERVER_SPEC);
NeoForge.EVENT_BUS.register(new CitadelEvents());
// Register NeoForge bus events (non-mod lifecycle events)
NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, Citadel::onServerAboutToStart);
}

@SubscribeEvent
Expand Down Expand Up @@ -123,14 +128,19 @@ public static void doClientStuff(final FMLClientSetupEvent event) {
@SubscribeEvent
public static void registerPayloads(RegisterPayloadHandlersEvent event) {
final PayloadRegistrar registrar = event.registrar("citadel").versioned("2.7.0").optional();
registrar.playToServer(PropertiesMessage.TYPE, PropertiesMessage.CODEC, PropertiesMessage::handle);
registrar.playToServer(AnimationMessage.TYPE, AnimationMessage.CODEC, AnimationMessage::handle);
// PropertiesMessage is bidirectional - used by both client (GUI) and server (entity utils)
registrar.playBidirectional(PropertiesMessage.TYPE, PropertiesMessage.CODEC, PropertiesMessage::handle);
// AnimationMessage is sent from server to all clients via sendToAllPlayers
registrar.playToClient(AnimationMessage.TYPE, AnimationMessage.CODEC, AnimationMessage::handle);
// DanceJukeboxMessage is sent from client to server via sendToServer
registrar.playToServer(DanceJukeboxMessage.TYPE, DanceJukeboxMessage.CODEC, DanceJukeboxMessage::handle);
registrar.playToServer(SyncePathMessage.TYPE, SyncePathMessage.CODEC, SyncePathMessage::handle);
registrar.playToServer(SyncPathReachedMessage.TYPE, SyncPathReachedMessage.CODEC, SyncPathReachedMessage::handle);
// SyncePathMessage is sent from server to specific player via sendToPlayer
registrar.playToClient(SyncePathMessage.TYPE, SyncePathMessage.CODEC, SyncePathMessage::handle);
// SyncPathReachedMessage is sent from server to specific player via sendToPlayer
registrar.playToClient(SyncPathReachedMessage.TYPE, SyncPathReachedMessage.CODEC, SyncPathReachedMessage::handle);
}

@SubscribeEvent(priority = EventPriority.LOWEST)
// Registered manually to NeoForge.EVENT_BUS in constructor (not a mod bus event)
public static void onServerAboutToStart(ServerAboutToStartEvent event) {
RegistryAccess registryAccess = event.getServer().registryAccess();
VillageHouseManager.addAllHouses(registryAccess);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public void playerRender(RenderPlayerEvent.Pre event) {
CitadelPatreonRenderer renderer = CitadelPatreonRenderer.get(rendererName);
if (renderer != null) {
float distance = tag.contains("CitadelRotateDistance") ? tag.getFloat("CitadelRotateDistance") : 2F;
float speed = tag.contains("CitadelRotateSpeed") ? tag.getFloat("CitadelRotateSpeed") : 1;
float speed = tag.contains("CitadelRotateSpeed") ? tag.getFloat("CitadelRotateSpeed") : 0F;
float height = tag.contains("CitadelRotateHeight") ? tag.getFloat("CitadelRotateHeight") : 1F;
renderer.render(matrixStackIn, event.getMultiBufferSource(), event.getPackedLight(), event.getPartialTick(), event.getEntity(), distance, speed, height);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.RegisterShadersEvent;

@EventBusSubscriber(Dist.CLIENT)
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public class ClientEvents {
@SubscribeEvent
public static void registerShaders(final RegisterShadersEvent e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.alexthe666.citadel.client.gui;

import com.github.alexthe666.citadel.Citadel;
import com.github.alexthe666.citadel.client.gui.data.EntityLinkData;
import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.systems.RenderSystem;
Expand Down Expand Up @@ -41,9 +42,19 @@ public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float
guiGraphics.pose().translate(this.getX(), this.getY(), 0);
guiGraphics.pose().scale(f, f, 1);
this.drawBtn(false, guiGraphics, 0, 0, lvt_5_1_, lvt_6_1_, 24, 24);
Entity model = null;
EntityType type = BuiltInRegistries.ENTITY_TYPE.get(ResourceLocation.parse(data.getEntity()));
model = renderedEntites.putIfAbsent(data.getEntity(), type.create(Minecraft.getInstance().level));
Entity model = renderedEntites.get(data.getEntity());
if (model == null) {
var optional = BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.parse(data.getEntity()));
if (optional.isPresent()) {
Entity newEntity = optional.get().create(Minecraft.getInstance().level);
if (newEntity != null) {
renderedEntites.put(data.getEntity(), newEntity);
}
} else {
Citadel.LOGGER.warn("Could not find entity type for book link button: {}", data.getEntity());
}
model = renderedEntites.get(data.getEntity());
}

guiGraphics.enableScissor(this.getX() + Math.round(f * 4), this.getY() + Math.round(f * 4), this.getX() + Math.round(f * 20), this.getY() + Math.round(f * 20));
if (model != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,15 @@ private void onSwitchPage(boolean next) {
refreshSpacing();
}

/**
* Override to disable the blur effect that was added in Minecraft 1.21
* Without this override, the screen content appears blurry
*/
@Override
protected void renderBlurredBackground(float partialTick) {
// Do nothing - this prevents the blur effect from being applied
}

@Override
public void render(GuiGraphics guiGraphics, int x, int y, float partialTicks) {
this.mouseX = x;
Expand Down Expand Up @@ -419,8 +428,13 @@ private void renderOtherWidgets(GuiGraphics guiGraphics, int x, int y, BookPage
for (EntityRenderData data : entityRenders) {
if (data.getPage() == this.currentPageCounter) {
Entity model = null;
EntityType type = BuiltInRegistries.ENTITY_TYPE.get(ResourceLocation.parse(data.getEntity()));
model = renderedEntites.putIfAbsent(data.getEntity(), type.create(Minecraft.getInstance().level));
try {
EntityType type = BuiltInRegistries.ENTITY_TYPE.get(ResourceLocation.parse(data.getEntity()));
model = renderedEntites.putIfAbsent(data.getEntity(), type.create(Minecraft.getInstance().level));
} catch (Exception e) {
Citadel.LOGGER.warn("Failed to create entity '{}' for book rendering, skipping.", data.getEntity(), e);
continue;
}
if (model != null) {
float scale = (float) data.getScale();
model.tickCount = Minecraft.getInstance().player.tickCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class LinkData {
private int x;
private int y;
private int page;
private ItemStack stack;
private transient ItemStack stack;

public LinkData(String linkedPage, String titleText, int x, int y, int page) {
this(linkedPage, titleText, x, y, page, ItemStack.EMPTY);
Expand Down Expand Up @@ -60,6 +60,6 @@ public void setY(int y) {
}

public ItemStack getDisplayItem() {
return this.stack.copy();
return this.stack != null ? this.stack.copy() : ItemStack.EMPTY;
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,38 @@
{
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
},
"vertex": "citadel:rendertype_rainbow_aura",
"fragment": "citadel:rendertype_rainbow_aura",
"attributes": ["Position", "Color", "UV0"],
"samplers": [{ "name": "Sampler0" }],
"uniforms": [
{
"name": "ModelViewMat",
"type": "matrix4x4",
"count": 16,
"values": [
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
0.0, 1.0
]
},
"vertex": "position_color_tex",
"fragment": "citadel:rendertype_rainbow_aura",
"attributes": [
"Position",
"Color",
"UV0"
],
"samplers": [
{ "name": "Sampler0" }
],
"uniforms": [
{ "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] },
{ "name": "GameTime", "type": "float", "count": 1, "values": [ 0.0 ] }
]
}
{
"name": "ProjMat",
"type": "matrix4x4",
"count": 16,
"values": [
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
0.0, 1.0
]
},
{
"name": "ColorModulator",
"type": "float",
"count": 4,
"values": [1.0, 1.0, 1.0, 1.0]
},
{ "name": "GameTime", "type": "float", "count": 1, "values": [0.0] }
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#version 150

in vec3 Position;
in vec4 Color;
in vec2 UV0;

uniform mat4 ModelViewMat;
uniform mat4 ProjMat;

out vec4 vertexColor;
out vec2 texCoord0;

void main() {
gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
vertexColor = Color;
texCoord0 = UV0;
}
9 changes: 3 additions & 6 deletions src/main/resources/citadel.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,9 @@
"package": "com.github.alexthe666.citadel.mixin",
"compatibilityLevel": "JAVA_17",
"refmap": "citadel.refmap.json",
"mixins": [
"BlockBehaviourAccessor"
],
"client": [
],
"mixins": ["BlockBehaviourAccessor", "LivingEntityMixin"],
"client": ["client.LivingEntityRendererMixin"],
"injectors": {
"defaultRequire": 1
}
}
}