You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/cg/design/simulation.mdx
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -69,4 +69,10 @@ After a lot of thinking, I came up with a design like this:
69
69
5. Execute player input functions from `InputHandler`
70
70
6. Render current state
71
71
72
-
Surprisingly it's not "read input, update state, render output" but "update state, read input, render output". This is because multiplayer fairness. If we read input at the beginning, players with low latency will be able to modify the world state one tick earlier than players with high latency. Yes we're actually caring for the future multiplayer era.
72
+
Surprisingly it's not "read input, update state, render output" but "update state, read input, render output". This is because multiplayer fairness. If we read input at the beginning, players with low latency will be able to modify the world state one tick earlier than players with high latency. Yes we're actually caring for the future multiplayer era.
73
+
74
+
## Adoptive Ticking
75
+
76
+
The question for every video game is: which reference should we align the ticking system to? Some just use turn-based system where there is no concept like time in the game, some use real-time system where the game state is updated according to real-world time, and some use a fixed-tick system where the game state is updated at a fixed rate regardless of real-world time.
77
+
78
+
CherryGrove uses a fixed-tick system just like Minecraft. But the tick rate is not fixed. It's meant to solve the biggest problem of fixed-tick system: time resolution.
Copy file name to clipboardExpand all lines: docs/cg/references/format/index.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,7 @@ Compressed CherryGrove content pack folder, similar to `.mcaddon` / `.mcpack`.
48
48
49
49
### [`.cgr`](format/cgr)
50
50
51
-
Compresse CherryGrove relocatable game save, similar to schematic or `.mcstructure` but with `manifest.json` that indexes potentially multiple structures stored using `.cgb` files.
51
+
Compressed CherryGrove relocatable game save, similar to schematic or `.mcstructure` but with `manifest.json` that indexes potentially multiple structures stored using `.cgb` files.
Copy file name to clipboardExpand all lines: docs/cg/releasing/packing.mdx
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,22 +4,22 @@ sidebar_position: 2
4
4
5
5
# Packing CherryGrove
6
6
7
-
This tutorial will help you pack the installer of CherryGrove for each platform. All packing related resources are located under the `packing` directory.
7
+
This tutorial will help you pack the files and generate the installer / package for each platform. All packing related resources are located under the `packing` directory.
8
8
9
9
:::warning
10
-
Remember to abide by the [terms](../../legal) when you want to distribute your builds.
10
+
Remember to abide by the [Terms of Use](../../legal#terms-of-use) when you want to distribute your builds.
11
11
:::
12
12
13
13
## Microsoft Windows
14
14
15
-
CherryGrove currently uses NSIS (Nullsoft Scriptable Install System) to pack for installer on Microsoft Windows. Download and install it at:https://nsis.sourceforge.io/Download.
15
+
CherryGrove currently uses Inno Setup to pack for installer on Microsoft Windows. Download and install it at https://jrsoftware.org/isdl.php.
16
16
17
-
NSIS uses `.nsi` script files to build the installer, which can be found at `packing/windows`. If you want to do a standard packing procedure, follow these steps:
17
+
Inno Setup uses `.iss` script files to build the installer, which can be found at `packing/windows`. If you want to do a standard packing procedure, follow these steps:
18
18
19
-
1. Build the **release** version of CherryGrove.
20
-
2. Run `packing/windows/pack.bat` and wait for all language varieties to be built.
19
+
1. Build the **release** version of CherryGrove, and check if it works properly and locates **exactly** at `out/windows-x64-release` directory.
20
+
2. Run `packing/windows/pack.bat`. You should see an installer file `CherryGrove_setup_win64.exe` generated inside the same directory.
21
21
22
-
Adjust the code in the scripts to create your custom procedures.
22
+
Adjust the code in the script to create your custom procedure.
Copy file name to clipboardExpand all lines: docs/legal.mdx
+13-5Lines changed: 13 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,7 @@
1
1
# Legal
2
2
3
+
**To see the terms, please refer to [Terms of Use](#terms-of-use). The [Introduction](#introduction) section does not form part of the terms.**
4
+
3
5
## Introduction
4
6
5
7
The founder of CherryGrove, [LJM12914](https://github.com/ljm12914#:~:text=It%27s%20a%20shame%20of%20open%20source%20to%20allow%20unrewarded%20commercial%20use.), don't like the situation and the definition of open source projects being used for commercial purposes without any compensation to the original developers:
@@ -8,12 +10,18 @@ The founder of CherryGrove, [LJM12914](https://github.com/ljm12914#:~:text=It%27
8
10
>
9
11
> LJM12914
10
12
11
-
#### So CherryGrove is a source available project. CherryGrove is NOT an open source project, and LJM12914 thinks this is NOT the fault of CherryGrove but the fault of open source definition's high expectations of human society.
13
+
#### So CherryGrove is a source available project. CherryGrove is NOT an open source project, and LJM12914 thinks this is NOT the fault of CherryGrove but the fault of open source definition's unrealistic expectations of humans and human society.
12
14
13
15
CherryGrove is dual-licensed under [PolyForm Noncommercial License 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0) and a commercial license. The PolyForm Noncommercial License 1.0.0 is a source-available license that allows you to use CherryGrove for non-commercial purposes, but requires you to purchase the commercial license for commercial use. The commercial license allows you to use CherryGrove for commercial purposes, including selling your own content packs and modified versions of CherryGrove.
14
16
15
17
For more information about the explanation of the license, please refer to [FAQ](cg/faq#licensing).
16
18
19
+
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED (and probably won't be approved) BY OR ASSOCIATED WITH MOJANG OR MICROSOFT. :)
20
+
21
+
Minecraft® is a trademark of Microsoft Corporation.
22
+
23
+
Every use of any trademark in this documentation is for identification purposes only and does not imply any affiliation with or endorsement by the trademark holder.
@@ -84,21 +92,21 @@ You must not use the CherryGrove name, logo, or any other trademarked material i
84
92
85
93
Notwithstanding the project's PolyForm Noncommercial License 1.0.0, the licensor grants you an irrevocable, worldwide, non-exclusive, and royalty-free permission to record, capture, store, copy, modify, transmit, distribute, and publish screenshots, videos, logs, journals, live streams, and world data produced by CherryGrove and to monetize them through any means, provided that the content is not used to create a commercial product or service that competes with any products or services offered by the licensor.
86
94
87
-
This exception does not grant you any rights to use the CherryGrove name, logo, or any other trademarked material in a way that suggests an endorsement or affiliation of you with CherryGrove without prior written permission from the licensor.
95
+
This exception DOES NOT grant you any rights to use the CherryGrove name, logo, or any other trademarked material in a way that suggests an endorsement or affiliation of you with CherryGrove without prior written permission from the licensor.
88
96
89
-
This exception does not grant you any rights to useany data, code, or other materials that are part of, or produced by a content pack. Content packs are subject to their own licenses. You need to follow the corresponding license if you want to use, copy, modify, distribute, or publish any data, code, or other materials that are part of, or produced by a content pack.
97
+
This exception DOES NOT grant you any rights to use, copy, modify, record, distribute, or publish any data, code, or other materials that are part of, or produced by a content pack. Content packs are subject to their own licenses. You need to follow the corresponding license if you want to use, copy, modify, record, distribute, or publish any data, code, or other materials that are part of, or produced by a content pack.
90
98
91
99
### User-Generated Content, Liability and Takedown
92
100
93
101
By transmitting, distributing, or publishing any content pack, or other user-generated content through CherryGrove or related services, you represent and warrant that:
94
102
95
103
- You have all rights needed to use, publish, and distribute the content;
96
-
- The content does not infringe IP, privacy, or publicity rights; does not contain malware; and complies with our Acceptable Use rules;
104
+
- The content does not infringe intellectual property, privacy, or publicity rights; does not contain malware; and complies with our Acceptable Use rules;
97
105
- You will comply with all applicable laws and marketplace rules where you take actions related to the content.
98
106
99
107
You fully understand that you are solely responsible for any content you transmit, distribute, or publish for CherryGrove. CherryGrove contributors are not the publisher of any user-generated content and have no obligation nor ability to review or monitor any user-generated content.
100
108
101
-
TO THE FULLEST EXTENT PERMITTED BY LAW, CherryGrove contributors AND ITS AFFILIATES**WILL NOT BE LIABLE** FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, OR EXEMPLARY DAMAGES; OR FOR LOSS OF PROFITS, REVENUE, DATA, GOODWILL, OR BUSINESS INTERRUPTION, **ARISING FROM OR RELATED TO USER-GENERATED CONTENT FOR CherryGrove**, EVEN IF ADVISED OF THE POSSIBILITY.
109
+
To the fullest extent permitted by law, CherryGrove contributors and its affiliates**WILL NOT BE LIABLE** FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, PUNITIVE, OR EXEMPLARY DAMAGES; OR FOR LOSS OF PROFITS, REVENUE, DATA, GOODWILL, OR BUSINESS INTERRUPTION, **ARISING FROM OR RELATED TO USER-GENERATED CONTENT FOR CherryGrove**, EVEN IF ADVISED OF THE POSSIBILITY.
102
110
103
111
We may preserve and share information with authorities if we believe it is necessary to comply with the law, protect our rights or property, or prevent harm to others.
CherryGrove uses two paradigms in pack system: direct-call, and event-driven. Direct-call is for things that will happen deterministically, like loading pack, generating terrain and periodic events. Event-driven is for things that may happen but are not guaranteed, like player actions, block events, and network events.
6
+
7
+
Every pack will has the following lifecycle:
8
+
9
+
1. When a world is opened, CherryGrove will read `world.cgb` to get the list of packs used in the world, then build a dependency graph. Then, each pack's `onFirstLoad()` function will be called once.
10
+
- Pack should finish initialization in this function. This is expected to be a big operation.
11
+
- Not all packs in the world will be firstloaded in this phase. CherryGrove will try to load as few packs as possible that can satisfy player's vicinity. Please set `config.alwaysLoad` to `true` if you want a pack to always be loaded.
12
+
2. When a player joins the world, each loaded pack's `onPlayerJoin(player)` function will be called once for that player.
13
+
3. When a player finished join operation, each loaded pack's `onPlayerReady(player)` function will be called once for that player.
14
+
4. When a player leaves the world, each loaded pack's `onPlayerLeave(player)` function will be called once for that player.
0 commit comments