@starktma/minecraft-utils 1.3.25 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/database/database.d.ts +6 -4
  2. package/dist/database/database.d.ts.map +1 -1
  3. package/dist/database/database.js +24 -11
  4. package/dist/database/database.js.map +1 -1
  5. package/dist/game-state-machine/database.d.ts +1 -1
  6. package/dist/game-state-machine/database.d.ts.map +1 -1
  7. package/dist/game-state-machine/database.js +1 -1
  8. package/dist/game-state-machine/database.js.map +1 -1
  9. package/dist/math/index.d.ts +63 -59
  10. package/dist/math/index.d.ts.map +1 -1
  11. package/dist/math/index.js +150 -76
  12. package/dist/math/index.js.map +1 -1
  13. package/dist/minecraft/effectsAPI.d.ts +44 -57
  14. package/dist/minecraft/effectsAPI.d.ts.map +1 -1
  15. package/dist/minecraft/effectsAPI.js +354 -351
  16. package/dist/minecraft/effectsAPI.js.map +1 -1
  17. package/dist/minecraft/index.d.ts +7 -7
  18. package/dist/minecraft/index.d.ts.map +1 -1
  19. package/dist/minecraft/index.js +45 -31
  20. package/dist/minecraft/index.js.map +1 -1
  21. package/dist/minecraft/projectileAPI.d.ts +21 -59
  22. package/dist/minecraft/projectileAPI.d.ts.map +1 -1
  23. package/dist/minecraft/projectileAPI.js +139 -137
  24. package/dist/minecraft/projectileAPI.js.map +1 -1
  25. package/dist/minecraft/structuresAPI.d.ts +10 -0
  26. package/dist/minecraft/structuresAPI.d.ts.map +1 -0
  27. package/dist/minecraft/structuresAPI.js +61 -0
  28. package/dist/minecraft/structuresAPI.js.map +1 -0
  29. package/package.json +5 -1
  30. package/dist/minecraft/potionAPI.d.ts +0 -74
  31. package/dist/minecraft/potionAPI.d.ts.map +0 -1
  32. package/dist/minecraft/potionAPI.js +0 -228
  33. package/dist/minecraft/potionAPI.js.map +0 -1
@@ -1,228 +0,0 @@
1
- import { MolangVariableMap, system, world, } from "@minecraft/server";
2
- // ========================== Utility Functions ================================
3
- /**
4
- * Parse effect key from projectile entity type ID
5
- */
6
- export function parseProjectileTypeId(typeId) {
7
- const parts = typeId.split(":");
8
- if (parts.length !== 2)
9
- return null;
10
- const [namespace, entityName] = parts;
11
- if (!entityName.endsWith("_potion_entity"))
12
- return null;
13
- const effectKey = entityName.replace("_potion_entity", "");
14
- return { namespace, effectKey };
15
- }
16
- /**
17
- * Extract RGBA color from entity properties
18
- */
19
- export function getColorFromEntity(entity, namespace) {
20
- return {
21
- red: entity.getProperty(`${namespace}:color_r`),
22
- green: entity.getProperty(`${namespace}:color_g`),
23
- blue: entity.getProperty(`${namespace}:color_b`),
24
- alpha: entity.getProperty(`${namespace}:color_a`),
25
- };
26
- }
27
- /**
28
- * Spawn splash particle effect
29
- */
30
- export function spawnSplashParticle(dimension, location, color, range) {
31
- const variables = new MolangVariableMap();
32
- variables.setFloat("splash_range", range);
33
- variables.setFloat("splash_power", 1);
34
- variables.setColorRGBA("color", color);
35
- dimension.spawnParticle("minecraft:splash_spell_emitter", location, variables);
36
- }
37
- /**
38
- * Spawn lingering cloud particle effect
39
- */
40
- export function spawnLingeringParticle(dimension, location, color, radius, maxRadius, lifetime) {
41
- const variables = new MolangVariableMap();
42
- variables.setFloat("cloud_lifetime", lifetime / 20);
43
- variables.setFloat("cloud_radius", radius);
44
- variables.setFloat("particle_multiplier", radius / maxRadius);
45
- variables.setColorRGBA("color", color);
46
- dimension.spawnParticle("minecraft:mobspell_lingering", location, variables);
47
- }
48
- // ========================== Potion Manager ===================================
49
- class PotionManager {
50
- configs = new Map();
51
- activeAOEClouds = new Map();
52
- cloudIdCounter = 0;
53
- isRunning = false;
54
- /**
55
- * Register a potion effect with its configuration and handler
56
- */
57
- registerPotion(config) {
58
- const key = `${config.namespace}:${config.effectKey}`;
59
- // Apply defaults
60
- const fullConfig = {
61
- splashRange: 4,
62
- lingeringMaxRadius: 3,
63
- lingeringLifetime: 600,
64
- lingeringDurationMultiplier: 0.25,
65
- ...config,
66
- };
67
- this.configs.set(key, fullConfig);
68
- return { handler: config.handler };
69
- }
70
- /**
71
- * Start the potion system - must be called in beforeEvents.worldInitialize
72
- */
73
- start(startup) {
74
- if (this.isRunning)
75
- return;
76
- this.isRunning = true;
77
- this.registerCustomComponents(startup);
78
- this.registerProjectileEvents();
79
- this.startCloudUpdater();
80
- }
81
- /**
82
- * Get a registered potion configuration (public method)
83
- */
84
- getConfig(effectKey, namespace) {
85
- return this.configs.get(`${namespace}:${effectKey}`);
86
- }
87
- registerCustomComponents(startup) {
88
- // Register potion effect components
89
- for (const [, config] of this.configs.entries()) {
90
- const componentId = `${config.namespace}:${config.effectKey}_potion_effect`;
91
- startup.itemComponentRegistry.registerCustomComponent(componentId, {
92
- onConsume: (event, params) => this.handleConsume(event, params, config),
93
- });
94
- }
95
- }
96
- registerProjectileEvents() {
97
- world.afterEvents.projectileHitBlock.subscribe((event) => {
98
- this.handleProjectileHit(event.projectile);
99
- });
100
- world.afterEvents.projectileHitEntity.subscribe((event) => {
101
- this.handleProjectileHit(event.projectile);
102
- });
103
- }
104
- startCloudUpdater() {
105
- system.runInterval(() => {
106
- for (const cloud of this.activeAOEClouds.values()) {
107
- this.updateAreaEffectCloud(cloud);
108
- }
109
- });
110
- }
111
- handleConsume(event, params, config) {
112
- const itemParams = params.params;
113
- const color = {
114
- red: itemParams.potion_color[0],
115
- green: itemParams.potion_color[1],
116
- blue: itemParams.potion_color[2],
117
- alpha: itemParams.potion_color[3],
118
- };
119
- config.handler(event.source, itemParams.amplifier, itemParams.duration, color);
120
- }
121
- /**
122
- * Handle projectile hit (splash or lingering)
123
- */
124
- handleProjectileHit(projectile) {
125
- const parsed = parseProjectileTypeId(projectile.typeId);
126
- if (!parsed)
127
- return;
128
- const config = this.getConfig(parsed.effectKey, parsed.namespace);
129
- if (!config)
130
- return;
131
- const potionType = projectile.getProperty(`${parsed.namespace}:type`);
132
- switch (potionType) {
133
- case 1:
134
- this.handleSplashPotion(projectile, config);
135
- break;
136
- case 2:
137
- this.handleLingeringPotion(projectile, config);
138
- break;
139
- default:
140
- projectile.remove();
141
- }
142
- }
143
- /**
144
- * Handle splash potion effect
145
- */
146
- handleSplashPotion(projectile, config) {
147
- const location = { ...projectile.location, y: projectile.location.y + 0.1 };
148
- const color = getColorFromEntity(projectile, config.namespace);
149
- const amplifier = projectile.getProperty(`${config.namespace}:amplifier`);
150
- const duration = projectile.getProperty(`${config.namespace}:duration`);
151
- spawnSplashParticle(projectile.dimension, location, color, config.splashRange);
152
- const nearbyEntities = projectile.dimension.getEntities({
153
- excludeTypes: ["minecraft:item", "minecraft:arrow"],
154
- location: projectile.location,
155
- maxDistance: config.splashRange,
156
- });
157
- for (const entity of nearbyEntities) {
158
- if (entity.id !== projectile.id) {
159
- config.handler(entity, amplifier, duration, color);
160
- }
161
- }
162
- projectile.remove();
163
- }
164
- /**
165
- * Handle lingering potion effect (creates area cloud)
166
- */
167
- handleLingeringPotion(projectile, config) {
168
- const location = { ...projectile.location, y: projectile.location.y + 0.1 };
169
- const color = getColorFromEntity(projectile, config.namespace);
170
- const amplifier = projectile.getProperty(`${config.namespace}:amplifier`);
171
- const duration = projectile.getProperty(`${config.namespace}:duration`);
172
- const cloud = {
173
- id: `aoe_cloud_${this.cloudIdCounter++}`,
174
- dimension: projectile.dimension.id,
175
- location,
176
- color,
177
- amplifier,
178
- duration,
179
- currentRadius: config.lingeringMaxRadius,
180
- maxRadius: config.lingeringMaxRadius,
181
- createdTick: system.currentTick,
182
- maxLifetime: config.lingeringLifetime,
183
- affectedEntities: new Set(),
184
- handler: config.handler,
185
- };
186
- this.activeAOEClouds.set(cloud.id, cloud);
187
- projectile.remove();
188
- }
189
- /**
190
- * Update lingering area effect cloud
191
- */
192
- updateAreaEffectCloud(cloud) {
193
- const dimension = world.getDimension(cloud.dimension);
194
- const age = system.currentTick - cloud.createdTick;
195
- const ageProgress = Math.min(age / cloud.maxLifetime, 1);
196
- cloud.currentRadius = Math.max(0, cloud.maxRadius * (1 - ageProgress));
197
- if (age >= cloud.maxLifetime || cloud.currentRadius <= 0) {
198
- this.activeAOEClouds.delete(cloud.id);
199
- return;
200
- }
201
- spawnLingeringParticle(dimension, cloud.location, cloud.color, cloud.currentRadius, cloud.maxRadius, cloud.maxLifetime);
202
- if (age < 20)
203
- return; // Skip entity effects for first second
204
- this.applyCloudEffects(dimension, cloud);
205
- }
206
- applyCloudEffects(dimension, cloud) {
207
- const nearbyEntities = dimension.getEntities({
208
- location: cloud.location,
209
- maxDistance: cloud.currentRadius + 1,
210
- excludeTypes: ["minecraft:item", "minecraft:arrow", "minecraft:xp_orb"],
211
- });
212
- for (const entity of nearbyEntities) {
213
- if (cloud.affectedEntities.has(entity.id))
214
- continue;
215
- const reducedDuration = Math.floor(cloud.duration * 0.25);
216
- cloud.handler(entity, cloud.amplifier, reducedDuration, cloud.color);
217
- cloud.currentRadius = Math.max(0, cloud.currentRadius - 0.5);
218
- cloud.maxLifetime = Math.max(0, cloud.maxLifetime - 100);
219
- cloud.affectedEntities.add(entity.id);
220
- system.runTimeout(() => {
221
- cloud.affectedEntities.delete(entity.id);
222
- }, 60); // 3 seconds
223
- }
224
- }
225
- }
226
- const potionManager = new PotionManager();
227
- export { PotionManager, potionManager };
228
- //# sourceMappingURL=potionAPI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"potionAPI.js","sourceRoot":"","sources":["../../src/minecraft/potionAPI.ts"],"names":[],"mappings":"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"}