Coder Social home page Coder Social logo

stellarica / stellarica Goto Github PK

View Code? Open in Web Editor NEW
8.0 0.0 4.0 1.61 MB

Semi-abandoned. Primary paper plugin for the Stellarica Minecraft server, adding various space-related mechanics.

License: GNU General Public License v3.0

Kotlin 99.34% Java 0.66%
minecraft bukkit spigot minecraft-server paper space-game minecraft-plugin starships kotlin

stellarica's Introduction

Stellarica

Project Status

I (trainb0y) used this project a way to learn Kotlin, and over the year and a half of off-and-on development learned a lot. However, I also made a bunch of questionable design decisions that would require some pretty major refactoring, that at this point I don't really want to do. I kind of lost interest in Minecraft, and have moved on to other things. I still make occasional commits to keep this up to date with recent Minecraft versions, but the current plugin isn't that usable. It's here, and public, if anyone is curious or wants to build off of it (though I wouldn't recommend it) but I don't plan to continue it.

(Updated January 2024)

About

This project (A gradle nightmare) contains:

  • A Paper plugin that aims to add various science fiction mechanics to Minecraft.
  • A QOL Fabric mod to pair with said plugin.
  • Extremely cursed networking abstractions for communicating between them

Overall it's a somewhat very cursed mess of WIP code.

Originally a fork of Astralchroma's Minecraft Starship Plugin, but this now actually does stuff:tm:

Uses some code (bukkit scheduler wrapper) from Horizon's End's OldIon codebase, though it has been mostly rewritten.

stellarica's People

Contributors

astralchroma avatar dependabot[bot] avatar hypersoop avatar novaforeversl avatar novamangood2110 avatar pigglemcdiggle avatar renovate[bot] avatar trainb0y avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stellarica's Issues

Ship Weapons

Multiblocks that can be placed on ships that fire projectile beams, causing damage on collision with a block or entity.

Terra Generation

Need to find a way to hook Terra's ChunkGenerator into Nucleoid's Fantasy. This would let us to custom worlds with terra generation at runtime.

Space Worlds

Space and planet worlds that allow crafts to fly between them.

idea/todo gapping

Keep a 1-block wide layer of air outside the ship detected as part of the ship, so you can't deactivate the ship only to have it stuck to the ground due to there always being a 1 block gap between the ship and said ground.

This would eliminate the need for a block blacklist.

Ships sometimes become ghost blocks

Piloting a ship quickly sometimes causes the ship's block updates over a chunk border not to be sent to the client, making part of the ship or its entirety "ghost" blocks to the client (exist on the server, but not on the client)

Custom items with power can't be used for crafting

Because of RecipeChoice.exactChoice items with non-zero power (different nbt) can not be used in crafting.
One way to get around this was custom crafting in which crafting is left to a listener rather than the bukkit api, but the complexity probably isn't worth it.

Hotbar Menu doesn't close

Sometimes upon logout or ship unpilot the hotbar menu does not go away, wiping the player's original hotbar.

/customitem give other player

/customitem give doesn’t restrict giving items to other players. As seen on SL/HE this can be an issue.

This should be a separate permission node.

Optimize ship rotation

Currently ship rotation does multiple sine/cosine operations per block to calculate the rotated position. This only needs to be done for precise locations like that of the passengers, not blocks.

Pipe System

A way to transport data by following a path of blocks between two points.
By "data" I mean

  • item stacks
  • numbers (like fuel or power)
  • or anything else that might need to be transported by pipes/items

Passengers don't move

Currently only the pilot is moved with the ship. It needs to find all passengers and move them all.

Configuration Rewrite

The current configuration system is... really dumb.

It uses the built-in bukkit api, which is really terrible compared to libraries such as configurate and kx.ser
In addition, effects such as projectiles, and maybe multiblock actions, should be able to be defined in config files.

If simple config files aren't enough, I wouldn't mind messing around with using kotlin scripts loaded at runtime (kotlin supports it pretty well, and performance should be good enough:tm:)

Destroyable Blocks

Should probably be done after #33

Certain blocks, such as tall grass and snow should be able to be overwritten in ship movement, rather than stopping the ship.

Tile Entities don't all move properly

Currently it is hardcoded so only chests move properly. This can easily be fixed, but I can't find a way to check if a block is a tile entity from a ChunkSnapshot, other than by checking the material against a list, which seems dumb.

Config loading lacks error handling

Config loading of custom items, blocks, and multiblocks lack good error handling, and are likely to throw NPE's if the config is formatted incorrectly. Useful error messages would be great.

Iron Bars don't rotate

Iron bars don't rotate, as they use facing data similar to mushroom blocks. (MultipleFacing, perhaps)

Use an EnumSet for detectable blocks

Currently it’s just a Set<Material>. EnumSet is better optimized for Enums.

Also the per ship detectable list needs to be reimplemented, some scraps exist from MSP but it isn’t functional.

Custom blocks drop item even when in Creative mode

Might need to use BlockDropItemEvent to fix.
Pretty sure the issue is event.isDropItems is always true, even if it shouldn't drop items (like if the player is in Creative mode)
Need to look into this more.

Ship Weapons

Special multiblocks that integrate with the ship to provide a Star Legacy-like weapon system

Scoreboard HUD

Hydrazine should have a scoreboard HUD similar to the system I developed for OldIon. In it players can add or remove "widgets" which display data on the scoreboard. The preference would need to be stored, probably in a SQL database

If possible it should be done using the team feature as objectives cause flicker with bad ping (sending 2 packets instead of 1)

Item and Block wrappers

Currently custom items and blocks are represented by string ids, which is... rather dumb.

There should also probably be wrapper classes that define a "block", or an "item stack" but doesn't care whether it's vanilla or custom.

This is one of the reasons id like to consider switching to serverside fabric, as items and blocks could be registered mostly normally using something like Polymer or PolyMc

Ship Collision Smoothing

(HyperSoop's idea)

Say a ship is moving at a downward slope, and nears the ground. Rather than colliding with the ground, it should continue going forward, and no longer attempt to move downward.

Ships don't move multiblocks

Ships need to update carried multiblocks, as it is, they undetect and leave an invalid multiblock in the chunk

Thrusters

Currently the rough plan for thrusters is:
3 types, three sizes of each type.
The types are:

  • Ion - Requires power, but no fuel. Low max speed, low acceleration.
  • Chemical - Requires fuel, but no power. Medium max speed, high acceleration.
  • Fusion - Requires fuel and power. High max speed and acceleration, but bulky and has a high operating cost.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.