First working alpha
88
src/main/java/eu/midnightdust/celestria/Celestria.java
Executable file
@@ -0,0 +1,88 @@
|
||||
package eu.midnightdust.celestria;
|
||||
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
||||
import eu.midnightdust.celestria.config.CelestriaConfig;
|
||||
import eu.midnightdust.celestria.effect.InsomniaStatusEffect;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.command.argument.EntityArgumentType;
|
||||
import net.minecraft.entity.effect.StatusEffect;
|
||||
import net.minecraft.entity.effect.StatusEffectCategory;
|
||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||
import net.minecraft.entity.effect.StatusEffects;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.command.CommandManager;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class Celestria implements ModInitializer {
|
||||
public static final String MOD_ID = "celestria";
|
||||
public static final Identifier SHOOTING_STAR_PACKET = new Identifier(MOD_ID, "shooting_star");
|
||||
public static final Identifier WELCOME_PACKET = new Identifier(MOD_ID, "welcome");
|
||||
public static final StatusEffect INSOMNIA = new InsomniaStatusEffect(StatusEffectCategory.HARMFUL, MidnightColorUtil.hex2Rgb("88A9C8").getRGB());
|
||||
public static int shootingStarCooldown = 0;
|
||||
private int prevPlayerAmount = 0;
|
||||
|
||||
public void onInitialize() {
|
||||
CelestriaConfig.init(MOD_ID, CelestriaConfig.class);
|
||||
Registry.register(Registry.STATUS_EFFECT, new Identifier(MOD_ID, "insomnia"), INSOMNIA);
|
||||
LiteralArgumentBuilder<ServerCommandSource> command = CommandManager.literal("shootingStar");
|
||||
var commandPlayers = command.then(CommandManager.argument("players", EntityArgumentType.players()));
|
||||
var commandX = commandPlayers.then(CommandManager.argument("x", IntegerArgumentType.integer(90, 180)));
|
||||
var commandY = commandX.then(CommandManager.argument("y", IntegerArgumentType.integer(0, 360)));
|
||||
var commandType = commandY.then(CommandManager.argument("type", IntegerArgumentType.integer(0, 3)));
|
||||
LiteralArgumentBuilder<ServerCommandSource> finalized = CommandManager.literal("celestria").requires(source -> source.hasPermissionLevel(2)).then(commandType).executes(ctx ->
|
||||
createShootingStar(EntityArgumentType.getPlayers(ctx, "players"),
|
||||
IntegerArgumentType.getInteger(ctx, "x"), IntegerArgumentType.getInteger(ctx, "y"), IntegerArgumentType.getInteger(ctx, "type")));
|
||||
|
||||
CommandRegistrationCallback.EVENT.register((dispatcher, dedicated, registrationEnvironment) -> dispatcher.register(finalized));
|
||||
ServerTickEvents.END_WORLD_TICK.register(world -> {
|
||||
if (shootingStarCooldown > 0) --shootingStarCooldown;
|
||||
if (world.getPlayers().size() > prevPlayerAmount) {
|
||||
world.getPlayers().forEach(player -> ServerPlayNetworking.send(player, WELCOME_PACKET, new PacketByteBuf(Unpooled.buffer())));
|
||||
prevPlayerAmount = world.getPlayers().size();
|
||||
}
|
||||
if (world.isNight() && world.getMoonPhase() == 0) {
|
||||
for (ServerPlayerEntity player : world.getPlayers()) {
|
||||
if (world.random.nextInt(CelestriaConfig.insomniaChance) == 0) {
|
||||
player.addStatusEffect(new StatusEffectInstance(INSOMNIA, CelestriaConfig.insomniaDuration, 0, true, false, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (world.isNight() && Celestria.shootingStarCooldown <= 0 && world.random.nextInt(CelestriaConfig.shootingStarChance) == 0) {
|
||||
int x = world.random.nextBetween(100, 150);
|
||||
int y = world.random.nextInt(360);
|
||||
int type = world.random.nextInt(3);
|
||||
createShootingStar(world.getPlayers(), x, y, type);
|
||||
Celestria.shootingStarCooldown = CelestriaConfig.shootingStarCooldownLength;
|
||||
}
|
||||
});
|
||||
}
|
||||
public int createShootingStar(Collection<ServerPlayerEntity> players, int x, int y, int type) {
|
||||
int[] array = new int[3];
|
||||
array[0] = x;
|
||||
array[1] = y;
|
||||
array[2] = type;
|
||||
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
|
||||
passedData.writeIntArray(array);
|
||||
|
||||
int message = Random.create().nextInt(CelestriaConfig.shootingStarMessages.size());
|
||||
players.forEach(player -> {
|
||||
player.addStatusEffect(new StatusEffectInstance(StatusEffects.LUCK, CelestriaConfig.shootingStarLuckDuration, 0, true, false, true));
|
||||
ServerPlayNetworking.send(player, SHOOTING_STAR_PACKET, passedData);
|
||||
if (CelestriaConfig.sendChatMessages) player.sendMessageToClient(Text.literal("§f§l[§7§lC§8§le§7§ll§f§le§7§ls§8§lt§7§lr§f§li§7§la§8§l] ").append(Text.translatable(CelestriaConfig.shootingStarMessages.get(message))),false);
|
||||
});
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
56
src/main/java/eu/midnightdust/celestria/CelestriaClient.java
Executable file
@@ -0,0 +1,56 @@
|
||||
package eu.midnightdust.celestria;
|
||||
|
||||
import eu.midnightdust.celestria.config.CelestriaConfig;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
||||
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class CelestriaClient implements ClientModInitializer {
|
||||
private static boolean clientOnlyMode = true;
|
||||
public static int shootingStarProgress = 0;
|
||||
public static int shootingStarType = 0;
|
||||
public static int shootingStarX = 0;
|
||||
public static int shootingStarY = 0;
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
FabricLoader.getInstance().getModContainer(Celestria.MOD_ID).ifPresent(modContainer -> {
|
||||
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier(Celestria.MOD_ID,"realistic"), modContainer, ResourcePackActivationType.NORMAL);
|
||||
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier(Celestria.MOD_ID,"pixelperfect"), modContainer, ResourcePackActivationType.NORMAL);
|
||||
});
|
||||
ClientPlayNetworking.registerGlobalReceiver(Celestria.SHOOTING_STAR_PACKET,
|
||||
(client, handler, attachedData, packetSender) -> {
|
||||
int[] array = attachedData.readIntArray(3);
|
||||
client.execute(() -> {
|
||||
if (client.world != null) {
|
||||
CelestriaClient.clientOnlyMode = false; // If the welcome packet wasn't received correctly for some reason, disable clientOnlyMode on shooting star occurrence
|
||||
CelestriaClient.shootingStarX = array[0];
|
||||
CelestriaClient.shootingStarY = array[1];
|
||||
CelestriaClient.shootingStarType = array[2];
|
||||
CelestriaClient.shootingStarProgress = 100 + shootingStarType * 10;
|
||||
}
|
||||
});
|
||||
});
|
||||
ClientPlayNetworking.registerGlobalReceiver(Celestria.WELCOME_PACKET,
|
||||
(client, handler, attachedData, packetSender) -> client.execute(() -> CelestriaClient.clientOnlyMode = false));
|
||||
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
||||
if (shootingStarProgress > 0) --shootingStarProgress;
|
||||
if (CelestriaClient.clientOnlyMode && client.world != null) {
|
||||
if (Celestria.shootingStarCooldown > 0) --Celestria.shootingStarCooldown;
|
||||
if (client.world.isNight() && Celestria.shootingStarCooldown <= 0 && client.world.random.nextInt(CelestriaConfig.shootingStarChance) == 0) {
|
||||
CelestriaClient.shootingStarX = client.world.random.nextBetween(100, 150);
|
||||
CelestriaClient.shootingStarY = client.world.random.nextInt(360);
|
||||
CelestriaClient.shootingStarType = client.world.random.nextInt(3);
|
||||
CelestriaClient.shootingStarProgress = 100 + shootingStarType * 10;
|
||||
Celestria.shootingStarCooldown = CelestriaConfig.shootingStarCooldownLength;
|
||||
}
|
||||
}
|
||||
});
|
||||
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> CelestriaClient.clientOnlyMode = true);
|
||||
}
|
||||
}
|
||||
17
src/main/java/eu/midnightdust/celestria/config/CelestriaConfig.java
Executable file
@@ -0,0 +1,17 @@
|
||||
package eu.midnightdust.celestria.config;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import eu.midnightdust.lib.config.MidnightConfig;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CelestriaConfig extends MidnightConfig {
|
||||
@Entry public static boolean sendChatMessages = true;
|
||||
@Entry public static int shootingStarChance = 10000;
|
||||
@Entry public static int shootingStarCooldownLength = 1000;
|
||||
@Entry public static int shootingStarLuckDuration = 1000;
|
||||
@Entry public static int insomniaChance = 30000;
|
||||
@Entry public static int insomniaDuration = 1000;
|
||||
@Entry public static List<String> shootingStarMessages = Lists.newArrayList("celestria.shootingStar.1", "celestria.shootingStar.2", "celestria.shootingStar.3");
|
||||
@Entry public static List<String> insomniaMessages = Lists.newArrayList("celestria.insomnia.1", "celestria.insomnia.2");
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package eu.midnightdust.celestria.effect;
|
||||
|
||||
import net.minecraft.entity.effect.StatusEffect;
|
||||
import net.minecraft.entity.effect.StatusEffectCategory;
|
||||
|
||||
public class InsomniaStatusEffect extends StatusEffect {
|
||||
public InsomniaStatusEffect(StatusEffectCategory statusEffectCategory, int color) {
|
||||
super(statusEffectCategory, color);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.midnightdust.celestria.mixin;
|
||||
|
||||
import eu.midnightdust.celestria.Celestria;
|
||||
import eu.midnightdust.celestria.config.CelestriaConfig;
|
||||
import net.minecraft.block.BedBlock;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(BedBlock.class)
|
||||
public abstract class MixinBedBlock {
|
||||
@Inject(at = @At("HEAD"), method = "onUse", cancellable = true)
|
||||
public void celestria$onBedUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable<ActionResult> cir) {
|
||||
if (!world.isClient() && player instanceof ServerPlayerEntity serverPlayer && player.hasStatusEffect(Celestria.INSOMNIA)) {
|
||||
if (CelestriaConfig.sendChatMessages) serverPlayer.sendMessageToClient(Text.literal("§f§l[§7§lC§8§le§7§ll§f§le§7§ls§8§lt§7§lr§f§li§7§la§8§l] ").append(Text.translatable(CelestriaConfig.insomniaMessages.get(world.random.nextInt(CelestriaConfig.insomniaMessages.size())))),false);
|
||||
cir.setReturnValue(ActionResult.FAIL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package eu.midnightdust.celestria.mixin;
|
||||
|
||||
import eu.midnightdust.celestria.render.ShootingStarRenderer;
|
||||
import net.minecraft.client.render.*;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.util.math.Matrix4f;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public abstract class MixinWorldRenderer {
|
||||
@Unique private final ShootingStarRenderer shootingStarRenderer = new ShootingStarRenderer();
|
||||
@Shadow @Nullable private ClientWorld world;
|
||||
|
||||
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", ordinal = 6, shift = At.Shift.BEFORE), method = "render")
|
||||
public void celestria$renderShootingStars(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f positionMatrix, CallbackInfo ci) {
|
||||
shootingStarRenderer.renderShootingStar(world, matrices);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package eu.midnightdust.celestria.render;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import eu.midnightdust.celestria.Celestria;
|
||||
import eu.midnightdust.celestria.CelestriaClient;
|
||||
import eu.midnightdust.lib.util.MidnightMathUtil;
|
||||
import net.minecraft.client.render.*;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.Matrix4f;
|
||||
import net.minecraft.util.math.Vec3f;
|
||||
|
||||
public class ShootingStarRenderer {
|
||||
public void renderShootingStar(ClientWorld world, MatrixStack matrices) {
|
||||
if (world != null && CelestriaClient.shootingStarProgress > 0) {
|
||||
world.getProfiler().swap("shooting_star");
|
||||
matrices.push();
|
||||
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(MidnightMathUtil.isEven(CelestriaClient.shootingStarType) ? CelestriaClient.shootingStarY + CelestriaClient.shootingStarProgress : CelestriaClient.shootingStarY - CelestriaClient.shootingStarProgress));
|
||||
matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(CelestriaClient.shootingStarX));
|
||||
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
BufferBuilder bufferBuilder = tessellator.getBuffer();
|
||||
RenderSystem.enableTexture();
|
||||
RenderSystem.defaultBlendFunc();
|
||||
RenderSystem.enableDepthTest();
|
||||
RenderSystem.enableBlend();
|
||||
float alpha = (float) (Math.log(CelestriaClient.shootingStarProgress) / 5f);
|
||||
RenderSystem.setShaderColor(1,1,1,alpha);
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||
RenderSystem.setShaderTexture(0, new Identifier(Celestria.MOD_ID, "textures/environment/shooting_star"+(CelestriaClient.shootingStarType+1)+".png"));
|
||||
bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE);
|
||||
bufferBuilder.vertex(matrix4f, -20.0F, -100.0F, 20.0F).texture(0.0F, 0.0F).next();
|
||||
bufferBuilder.vertex(matrix4f, 20.0F, -100.0F, 20.0F).texture(1.0F, 0.0F).next();
|
||||
bufferBuilder.vertex(matrix4f, 20.0F, -100.0F, -20.0F).texture(1.0F, 1.0F).next();
|
||||
bufferBuilder.vertex(matrix4f, -20.0F, -100.0F, -20.0F).texture(0.0F, 1.0F).next();
|
||||
BufferRenderer.drawWithShader(bufferBuilder.end());
|
||||
RenderSystem.disableTexture();
|
||||
matrices.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
src/main/resources/assets/celestria/icon.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
17
src/main/resources/assets/celestria/lang/de_de.json
Executable file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"celestria.midnightconfig.title": "Celestria Konfiguration",
|
||||
"celestria.midnightconfig.sendChatMessages": "Sende Chat Nachrichten bei Events",
|
||||
"celestria.midnightconfig.shootingStarChance": "Sternschnuppen-Wahrscheinlichkeit",
|
||||
"celestria.midnightconfig.shootingStarCooldownLength": "Sternschnuppen Cooldown Länge",
|
||||
"celestria.midnightconfig.shootingStarLuckDuration": "Sternschnuppen Glück Effektlänge",
|
||||
"celestria.midnightconfig.shootingStarMessages": "Sternschnuppen-Nachrichten",
|
||||
"celestria.midnightconfig.insomniaChance": "Schlaflosigkeits-Wahrscheinlichkeit",
|
||||
"celestria.midnightconfig.insomniaMessages": "Schlaflosigkeits-Nachrichten",
|
||||
"celestria.midnightconfig.insomniaDuration": "Schlaflosigkeit Effektlänge",
|
||||
"celestria.shootingStar.1": "§eOh, schau! Eine Sternschnuppe ist erschienen und hat dir Glück gebracht!",
|
||||
"celestria.shootingStar.2": "§6Wow, eine Sternschnuppe ist erschienen, wünsch dir was!",
|
||||
"celestria.shootingStar.3": "§2♪ Can we pretend that airplanes in the night sky are like shooting stars... ♫\n§3Oh warte, da ist ja eine echte Sternschnuppe!",
|
||||
"celestria.insomnia.1": "§cDu hast Angst vor dem Vollmond, also kannst du einfach nicht einschlafen...",
|
||||
"celestria.insomnia.2": "§3Ouuwwwh... Du hörst seltsame Geräusche und kannst deine Augen nicht schließen",
|
||||
"celestria.mob_effect.insomnia": "Schlaflosigkeit"
|
||||
}
|
||||
17
src/main/resources/assets/celestria/lang/en_us.json
Executable file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"celestria.midnightconfig.title": "Celestria Config",
|
||||
"celestria.midnightconfig.sendChatMessages": "Send Chat Messages on Events",
|
||||
"celestria.midnightconfig.shootingStarChance": "Shooting Star Chance",
|
||||
"celestria.midnightconfig.shootingStarCooldownLength": "Shooting Star Cooldown Length",
|
||||
"celestria.midnightconfig.shootingStarLuckDuration": "Shooting Star Luck Duration",
|
||||
"celestria.midnightconfig.shootingStarMessages": "Shooting Star Messages",
|
||||
"celestria.midnightconfig.insomniaChance": "Insomnia Chance",
|
||||
"celestria.midnightconfig.insomniaMessages": "Insomnia Messages",
|
||||
"celestria.midnightconfig.insomniaDuration": "Insomnia Effect Duration",
|
||||
"celestria.shootingStar.1": "§eOh, look! A shooting star appeared and blessed you with good luck!",
|
||||
"celestria.shootingStar.2": "§6Wow, a shooting star appeared, make a wish!",
|
||||
"celestria.shootingStar.3": "§2♪ Can we pretend that airplanes in the night sky are like shooting stars... ♫\n§3Oh wait, there's a real one!",
|
||||
"celestria.insomnia.1": "§cYou're afraid of the full moon, so you just can't find no rest...",
|
||||
"celestria.insomnia.2": "§3Ouuwwwh... You hear strange noises from afar and can't close your eyes",
|
||||
"celestria.mob_effect.insomnia": "Insomnia"
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 13 KiB |
14
src/main/resources/celestria.mixins.json
Executable file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"required": true,
|
||||
"package": "eu.midnightdust.celestria.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"client": [
|
||||
"MixinWorldRenderer"
|
||||
],
|
||||
"mixins": [
|
||||
"MixinBedBlock"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
34
src/main/resources/fabric.mod.json
Executable file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "celestria",
|
||||
"version": "${version}",
|
||||
|
||||
"name": "Celestria",
|
||||
"description": "Adds celestrial events, such as shooting stars and occasional insomnia from full moon.",
|
||||
"authors": [
|
||||
"Motschen",
|
||||
"TeamMidnightDust"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://www.midnightdust.eu/",
|
||||
"sources": "https://github.com/TeamMidnightDust/Celestria",
|
||||
"issues": "https://github.com/TeamMidnightDust/Celestria/issues"
|
||||
},
|
||||
|
||||
"license": "MIT",
|
||||
"icon": "assets/celestria/icon.png",
|
||||
|
||||
"environment": "*",
|
||||
"entrypoints": {
|
||||
"main": [
|
||||
"eu.midnightdust.celestria.Celestria"
|
||||
],
|
||||
"client": [
|
||||
"eu.midnightdust.celestria.CelestriaClient"
|
||||
]
|
||||
},
|
||||
|
||||
"mixins": [
|
||||
"celestria.mixins.json"
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
6
src/main/resources/resourcepacks/pixelperfect/pack.mcmeta
Executable file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 9,
|
||||
"description": "Makes the shooting star texture consistent with vanilla stars"
|
||||
}
|
||||
}
|
||||
BIN
src/main/resources/resourcepacks/pixelperfect/pack.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
2
src/main/resources/resourcepacks/realistic/SOURCES
Executable file
@@ -0,0 +1,2 @@
|
||||
https://www.pngkey.com/maxpic/u2a9o0o0o0y3u2u2/
|
||||
https://picsart.com/i/sticker-275568554020211
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 34 KiB |
6
src/main/resources/resourcepacks/realistic/pack.mcmeta
Executable file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 9,
|
||||
"description": "Makes the shooting star textures appear realistic"
|
||||
}
|
||||
}
|
||||
BIN
src/main/resources/resourcepacks/realistic/pack.png
Normal file
|
After Width: | Height: | Size: 34 KiB |