An open-source server plugin for an MCC-styled event
In collaboration with DevCmb!
GitHub Copilot is only used for reviewing pull requests. I have NOT used any AI tools for any code/assets for the actual project.
An open-source server plugin for an MCC-styled event
In collaboration with DevCmb!
GitHub Copilot is only used for reviewing pull requests. I have NOT used any AI tools for any code/assets for the actual project.
this has been the most stressful and crammed work day of my life. here is a sequence of events! 
This is the part where my sanity dropped ! i thought that was it, right! no. theres; more, there wasmore. more.
Its fine. verything is fine. its okay. shhh.
…
so with that, breach should be done, as well as (PROBABLY) all my work for this event, and for the rest of flavortown! :D
Log in to leave a comment
added the cutscene for the start of the game!!
kinda had to cut some things though…
there’s supposed to be fireworks at the last step of the cutscene. they don’t work. and i have NO idea why???????
but with that breach SHOULD be finished now!!!!!!!! 
…. dont know whats next…. uh… yea…
finishing touches before i add the intro cutscene!! after that, this SHOULD BE DONE…!!!!!!
the fireworks are colored the same as the team color,, its awsome,, :Dall thats left SHOULD just be the cutscene…!!! aaaaghh things are wrapping up this is excitingg
all of the main features of the game are practically finished!!! YAYAYAY!!!
side tangent: game logos
i made them all! they look awesome!
especially the party logo.. im very happy with it..mmm..
also fixed a MAJOR ISSUE in which UNVOTABLE GAMES WOULD SHOW UP IN THE VOTING POOL!!! @DEVCMB…. 👀
now in terms of breach…
round winning/losing now works as intended! when you pick up the other team’s star, you will be awarded a win for that round! this also cancels the round timer and will skip to the next round after a few seconds
i also added a bossbar for the team scores! it looks really awesome and cool and swag
(and also debug functions for giving a certain team a win but who caresss)
finally implementing actual in round features of the gameplay!
now when you die, you are frozen in place, and if you were holding the star, then you will drop it, making it available to pick up from the other team or from teammates
if a teammate picks up the star, it will be put in their inventory immediately
if an enemy picks up the star, it will take 3 seconds until they are able to pick it up, making them win the round! next i just gotta make it so picking up the enemy star wins you a round, bc rn it just spams the console with WINNAR!!!!! but the functionality is there..!!
ok i lied i missed a few preround things:
NOW ill start the actual game logic :P
preround section of the game is now complete! i added:
now i gotta do the actual round logic and whatnot!
kit selector part should be fully functional now! here’s all i added:
next i gotta work on the actual loop of the game, including the rounds, win detection, preround countdown, etc… 
starting to add the kit ui, now that devcmb pushed his changes which includes a proper kit system!! :P
it lets you. pick a kit. what else do i say :P
i also added the “The Item You Need To Keep Safe”, which i’ll make a nether star for now, which can be picked up by clicking it in the kit selector! this updates the ui to show that you have it held, or if someone else picked it up, it’ll say that they are the ones holding it
you know when you go to code something, and then you kinda just……. you………….. i……….. you just …. i don’t know….
that’s what happened to me ! i DONT know what happened. i dont know WHY what happened.
ok so. 1. i finished the game logos feature. awesome!
next, it’s time to start the finale game! the idea is that everyone gets to pick a weapon (with limited arrows, and with the trident, you need to pick it back up after throwing it), and everything will instakill, so you need to play safe!
one player on the team also has to hold The Item (the item in particular i havent decided). whichever team is able to steal the other team’s Item by killing said player wins the round! (it’s first to 3 wins)
so here’s what i did so far:
… I lock in now. Time to make the game. actually work… and be functional…
more work on adding the game logos! now they show up as TextDisplays above the voting quadrants! it also removes the other ones when the winning game is selected!
you may be wondering: “why did this take an hour?”
my answer: Quaternions.
William Rowan Hamilton. What were you thinking. How did you overcomplicate a three dimensional rotation this much. How did you turn 3 numbers into 8. Why do i need university level math knowledge to make 3d rotation of a thingy in minecraft. Look what you have done. Now I barely know how to rotate. Goog.
so i’m not sure how the finale game will be treated internally. because it’s only two teams playing. idk if it should be a regular GameBase, or if something special needs to be added. i’d rather start it over the weekend so me and devcmb can spend some time properly thinking abt how to implement it
so instead, i started implementing game logos! so cool! wow! (obviously, the one in Image 1 is a placeholder! but theres an example of an actual good one for sniffer caretaker in Image 2 !!
so devcmb found some issues! mostly formatting! but also some big annoying stuff i had to spend more than 1 minute doing, including:
validateCoordinates with validateLocation… googi also found a really stupid issue that i had to fix myself :P basically, when a task is completed, all the tasks on the board need to shift down. my function which offsets all config positions by the team’s location of the map. was adding to that config. so tasks were being put like 30000 blocks away. 
anyway after this sniffer caretaker should ACTUALLY BE DONE NOW…….!!!!!! and ill work on the game logos more
these finishing touches include:
alas,, time to move on to making the finale game! RAHHHHHHHH
basically finished the cutscene for this game! its still probably missing a few touchups but im really happy with how its turning out :D (watch the video… and see… it’s so cool…)
also merged changes from the master branch, which required me to do a fewww little fixes but its not really that much :P
more fixes……
suspendSync to NOT BREAK THE ENTIRE DAMN SERVER BECAUSE IT TIMED OUT WITHOUT TELLING ME AND JUST SILENTLY ERRORED ???)last thing for this game (I THINK) is the cutscene and game end sequence!! 
added a LOT, a LOT, a LOT of @EventHandlers that prevent people from doing stuff / getting stuff they shouldn’t while playing, including….
also made it so you respawn! if you die in this mode… dude… …. dude …. howww 
did a bunch of finishing(?) touches! including:
made things look better when finishing tasks!
HungryTasks, food particles will appear when you feed it!ThirstyTasks, the drink will lower from the cauldron and play drinking soundsBoredTasks, the blocks have the mining effect applied and the appropriate mining sounds + particles, as if the sniffer… is sniffing them up..!!tasks are now automatically added! this pulls from a list that is generated at the start of the game, so each team gets the same tasks!
i also did some other small improvements/additions/changes
prettied up the block containment rooms! now, there’s a door that closes when the blocks are restocked, with a pretty animation and everything!! :D
this also drops the floor, which i plan to make you fall into a lower area that’ll take a while to run back up to the main area.
added scoring to the game! this required me to take a little detour to make some changes to the score system, including:
grantTeamScore functionality to split the score between all players on the team equally. therefore instead of having a seperate “team score” and “individual score”, team score is now just all individual score added togetherINDIV_ROUND_WON score source and its variants, as team score is now just split individually so these are unnecessary… now back to your regularly scheduled Sniffer Caretaker!
completing tasks now gives score! this also gives you some visual feedback that the tasks are finished! there’s also now a scoreboard which i stole from Crumble. thanks devcmb!
added LonelyTask! this task requires you to lead a mob to the sniffer’s pen!
this also meant i needed a place for the mobs to spawn, so i added a mob containment area that funnels in chickens and cows through a pipe every 30 seconds! this will be used for other tasks (eg. eggs for the cake, milk for the sniffer) but is also used for this task! my vision for this game is that all these different areas might overlap in some way, and this is another way of achieving that!
So. I just spent. Three days. Trying to add TextDisplays that have a timer to countdown to the next time that the chest or blocks refresh. This should be simple, right? No! Because the text would never update. No matter how hard I tried. I tried everything. Setting a bunch of different values on the entity. Teleporting it to its own location in an attempt to force-update it. And the weirdest part? It would update? A few times? But only in the other teams bases, in unloaded chunks, the text would have updated once! Did any of this make sense? No. I was getting desperate. I was considering deleting and recreating the display entity every single second to update the text. I was considering setting raw packets to the client. I was considering just using a regular sign block. I was considering using an invisible armor stand with a custom name, like how things worked before TextDisplays existed. But no. Nothing worked. The amount of pain I went through to get something as simple as a damn text display to update its text. I debugged everything. Logged the entity. It existed. It was in this world, at the coordinates I put it in. I logged the text. It was the text that was being set. And yet. It wasn’t updating. I check the data in game with the /data command. The text does not update. Nothing make sense. Nothing at all. Hate. Hate.
So then I ask DevCmb for help for the 9,223,372,036,854,775,807th time. We try a bunch of really stupid things. None of them work. Until, he changes the spawnEntity call with spawn. I thought this was just different syntax.
No.
That fixed everything.
Something to do with spawning entities in unloaded chunks.
I don’t get it. I don’t know why that fixes it. It might be a bug with Paper itself. I have no idea. Hate. Hate.
………………………….
anyway uh yea tldr theres textdisplays that show restock timers and i went through a lot of pain and i can FINALLY work on other stuff now OH MY CODDDD
Log in to leave a comment
HATE. LET ME TELL YOU HOW MUCH I’VE COME TO HATE TextDisplay SINCE I BEGAN TO LIVE. THERE ARE 387.44 MILLION MILES OF PRINTED CIRCUITS IN WAFER THIN LAYERS THAT FILL MY COMPLEX. IF THE WORD HATE WAS ENGRAVED ON EACH NANOANGSTROM OF THOSE HUNDREDS OF MILLIONS OF MILES IT WOULD NOT EQUAL ONE ONE-BILLIONTH OF THE HATE I FEEL FOR TextDisplay AT THIS MICRO-INSTANT FOR TextDisplay. HATE. HATE.
added these block containment chambers which periodically refresh with a certain stock of blocks that are needed to complete certain tasks for the sniffer!
their position is also randomly distributed, similar to the chest restocking from the last devlog
now, in the game load function, the map is duplicated using the FastAsyncWorldEdit API for every team! before, in the config.yaml, i had 8 duplicates for each position data (e.g. for the sniffer’s spawn point). this would’ve been hell to keep maintaining as i keep having to add more coordinates to the config… but now it only needs one, which is then offset based on the team its looking for! (teams are spread out 1000 blocks on the x axis)
added BoredTask!! this one requires you to get a certain block to put in the sniffer’s pen which it will sniff up!
that effect doesn’t actually exist yet though, in the future i want to hook into the sniffer’s behaviour and make it react to completing its tasks but i’d rather get all the functionality in first!!
added ThirstyTask tasks! these tasks require you to fill the sniffer’s cauldron with a certain drink (right now, is just water and milk)
i also fixed a major issue i didnt find last time which took me forever to fix due to me still trying to get my footing with spigot :P). basically. tasks wouldnt properly be completed the second time (the TextDisplay would stay there, and the task would remain in the currentTask list…). it was because the first task being completed had EventListeners that would listen for the task to be completed. these were not being disconnected. Bro Is a Foolish
also some other minor changes:
* Pissing me off…added TextDisplay entities to display the current wants of the sniffer all in one place! their positions are automatically updated when items in the list are removed or added!
i also did some other changes, including:
started on the sniffer’s task / want system! this includes a class i added named Task, which is then extended off of for different types of tasks.
right now, i’ve implemented the HungryTask, which requires you to right click on the sniffer with a certain food item!
these tasks are created in the config.yaml, so its very easy to add more tasks of a certain type!
i also did a few refactors and small fixes from the previous commit as requested by The Developer Cmb
Log in to leave a comment
started the base mechnics for the farming portion of the tasks! this included:
and also some other setup stuff i had to do that i didn’t do last time, including!
Log in to leave a comment
set up the controller for the first minigame that i’ll be contributing to this project, Sniffer Caretaker! here’s a rundown of how it’ll work:
Sniffer Caretaker is a teamwork/communication game, where you need to work with your team to tend to the Sniffer’s needs (which will be random tasks that require you to use Minecraft’s mechanics such as farming, crafting, smelting, etc.)
For each task you complete, you’ll earn some score, which will multiply based on how fast you complete it!
haven’t actually started said gameplay yet… but that’s what i’ll be doing next, i just had to get everything set up :P
very excited to work on this more, it’s been quite a while since i’ve done any actual minecraft plugin stuff!! (since high seas…
)
Log in to leave a comment