diff --git a/README.md b/README.md
index ed1c0b7b..55981119 100644
--- a/README.md
+++ b/README.md
@@ -185,7 +185,7 @@ Now, all that is left is to actually use that component. You can access individu
```java
public static void useMagik(Entity provider) { // anything will work, as long as a module allows it!
// Retrieve a provided component
- int magik = MAGIK.get(provider).getValue();
+ int magik = provider.getComponent(MAGIK).getValue();
// Or, if the object is not guaranteed to provide that component:
int magik = MAGIK.maybeGet(provider).map(IntComponent::getValue).orElse(0);
// ...
diff --git a/build.gradle b/build.gradle
index ca8dd6fa..aebc0caf 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ import net.fabricmc.loom.task.RemapJarTask
import java.time.Year
plugins {
- id "fabric-loom" version "0.11-SNAPSHOT" apply false
+ id "fabric-loom" version "0.12-SNAPSHOT" apply false
id 'io.github.juuxel.loom-quiltflower' version "1.6.0"
id "org.cadixdev.licenser" version "0.6.1"
id "com.matthewprenger.cursegradle" version "1.4.0"
@@ -292,7 +292,7 @@ dependencies {
// used by the test mod
modImplementation fabricApi.module("fabric-api-base", fabric_api_version)
modImplementation fabricApi.module("fabric-object-builder-api-v1", fabric_api_version)
- modImplementation fabricApi.module("fabric-renderer-registries-v1", fabric_api_version)
+ modImplementation fabricApi.module("fabric-rendering-v1", fabric_api_version)
modImplementation fabricApi.module("fabric-lifecycle-events-v1", fabric_api_version)
modImplementation fabricApi.module("fabric-item-api-v1", fabric_api_version)
modImplementation fabricApi.module("fabric-item-groups-v0", fabric_api_version)
@@ -300,17 +300,15 @@ dependencies {
modImplementation fabricApi.module("fabric-api-lookup-api-v1", fabric_api_version)
modImplementation fabricApi.module("fabric-command-api-v1", fabric_api_version)
modImplementation fabricApi.module("fabric-gametest-api-v1", fabric_api_version)
- modRuntimeOnly fabricApi.module("fabric-networking-v0", fabric_api_version)
+ modRuntimeOnly fabricApi.module("fabric-networking-api-v1", fabric_api_version)
modRuntimeOnly fabricApi.module("fabric-resource-loader-v0", fabric_api_version)
- modRuntimeOnly fabricApi.module("fabric-mining-levels-v0", fabric_api_version)
- modRuntimeOnly fabricApi.module("fabric-tag-extensions-v0", fabric_api_version)
- modRuntimeOnly fabricApi.module("fabric-tool-attribute-api-v1", fabric_api_version)
modRuntimeOnly fabricApi.module("fabric-events-interaction-v0", fabric_api_version)
+ modRuntimeOnly fabricApi.module("fabric-registry-sync-v0", fabric_api_version)
testCompileOnly "com.google.code.findbugs:jsr305:3.0.2"
include fabricApi.module("fabric-api-base", fabric_api_version)
- include fabricApi.module("fabric-networking-v0", fabric_api_version)
+ include fabricApi.module("fabric-networking-api-v1", fabric_api_version)
afterEvaluate {
subprojects.each {
diff --git a/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentAccess.java b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentAccess.java
new file mode 100644
index 00000000..c54ae824
--- /dev/null
+++ b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentAccess.java
@@ -0,0 +1,101 @@
+/*
+ * Cardinal-Components-API
+ * Copyright (C) 2019-2022 OnyxStudios
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ * OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package dev.onyxstudios.cca.api.v3.component;
+
+import dev.onyxstudios.cca.api.v3.component.sync.ComponentPacketWriter;
+import dev.onyxstudios.cca.api.v3.component.sync.PlayerSyncPredicate;
+
+import java.util.NoSuchElementException;
+
+/**
+ * Interface injected into classes that support the Cardinal Components API.
+ *
+ *
Implementations of this interface should do so through {@link ComponentProvider}.
+ *
+ * @see ComponentProvider
+ * @since 5.0.0
+ */
+// Note: no method in this interface can be abstract, as it is injected into commonly inherited types by Loom
+public interface ComponentAccess {
+ /**
+ * @param key the key object for the type of component to retrieve
+ * @return the nonnull value of the held component of this type
+ * @param the type of component to retrieve
+ * @throws NullPointerException if {@code key} is null
+ * @throws NoSuchElementException if this provider does not provide the desired type of component
+ */
+ default C getComponent(ComponentKey key) {
+ return key.get(this.asComponentProvider());
+ }
+
+ /**
+ * Attempts to synchronize the component of the desired type with watching clients.
+ *
+ * This method has no visible effect if {@linkplain #asComponentProvider() this provider} does not support synchronization, or
+ * the associated component does not implement an adequate {@linkplain dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent synchronization interface}.
+ *
+ * @param key the key object for the type of component to synchronize
+ * @throws NoSuchElementException if the provider does not provide this type of component
+ * @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentKey#sync(Object)
+ */
+ default void syncComponent(ComponentKey> key) {
+ key.sync(this.asComponentProvider());
+ }
+
+ /**
+ * Attempts to synchronize the component of the desired type with watching clients using the specified {@code packetWriter}.
+ *
+ *
This method has no visible effect if {@linkplain #asComponentProvider() this provider} does not support synchronization, or
+ * the associated component does not implement an adequate {@linkplain dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent synchronization interface}.
+ *
+ * @param key the key object for the type of component to synchronize
+ * @param packetWriter a writer for the sync packet
+ * @throws NoSuchElementException if the provider does not provide this type of component
+ * @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentKey#sync(Object, ComponentPacketWriter)
+ */
+ default void syncComponent(ComponentKey> key, ComponentPacketWriter packetWriter) {
+ key.sync(this.asComponentProvider(), packetWriter);
+ }
+
+ /**
+ * Attempts to synchronize the component of the desired type with watching clients matching the {@code predicate},
+ * using the specified {@code packetWriter}.
+ *
+ *
This method has no visible effect if {@linkplain #asComponentProvider() this provider} does not support synchronization, or
+ * the associated component does not implement an adequate {@linkplain dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent synchronization interface}.
+ *
+ * @param key the key object for the type of component to synchronize
+ * @throws NoSuchElementException if the provider does not provide this type of component
+ * @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentKey#sync(Object, ComponentPacketWriter, PlayerSyncPredicate)
+ */
+ default void syncComponent(ComponentKey> key, ComponentPacketWriter packetWriter, PlayerSyncPredicate predicate) {
+ key.sync(this.asComponentProvider(), packetWriter, predicate);
+ }
+
+ default ComponentProvider asComponentProvider() {
+ return (ComponentProvider) this;
+ }
+}
diff --git a/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentKey.java b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentKey.java
index 6d27e935..58356295 100644
--- a/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentKey.java
+++ b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentKey.java
@@ -33,7 +33,6 @@
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;
-import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
@@ -58,28 +57,32 @@ public final Class getComponentClass() {
}
/**
+ * Attempts to retrieve a component instance from the given {@code provider}.
+ *
* @param provider a component provider
* @return the attached component associated with this key, or
* {@code null} if the provider does not support this type of component
- * @throws ClassCastException if the {@code provider} is
+ * @throws ClassCastException if provider
does not implement {@link ComponentProvider}
* @see #get(Object)
* @see #maybeGet(Object)
*/
@Contract(pure = true)
- public @Nullable C getNullable(V provider) {
+ public @Nullable C getNullable(Object provider) {
return this.getInternal(((ComponentProvider) provider).getComponentContainer());
}
/**
+ * Retrieves a component instance from the given {@code provider}.
+ *
* @param provider a component provider
- * @param the class of the component provider
* @return the nonnull value of the held component of this type
* @throws NullPointerException if {@code provider} is null
* @throws NoSuchElementException if the provider does not provide this type of component
* @throws ClassCastException if provider
does not implement {@link ComponentProvider}
* @see #maybeGet(Object)
+ * @see ComponentAccess#getComponent(ComponentKey)
*/
- public final C get(V provider) {
+ public final C get(Object provider) {
C component = this.getInternal(((ComponentProvider) provider).getComponentContainer());
assert component == null || this.getComponentClass().isInstance(component);
@@ -99,12 +102,11 @@ public final C get(V provider) {
/**
* @param provider a component provider
- * @param the class of the component provider
* @return an {@code Optional} describing a component of this type, or an empty
* {@code Optional} if {@code provider} does not have such a component.
* @see #get(Object)
*/
- public final Optional maybeGet(@Nullable V provider) {
+ public final Optional maybeGet(@Nullable Object provider) {
if (provider instanceof ComponentProvider p) {
return Optional.ofNullable(this.getInternal(p.getComponentContainer()));
}
@@ -112,7 +114,7 @@ public final Optional maybeGet(@Nullable V provider) {
}
@Contract(pure = true)
- public boolean isProvidedBy(V provider) {
+ public boolean isProvidedBy(Object provider) {
return this.getNullable(provider) != null;
}
@@ -123,11 +125,11 @@ public boolean isProvidedBy(V provider) {
* the associated component does not implement an adequate synchronization interface.
*
* @param provider a component provider
- * @param the class of the component provider
* @throws NoSuchElementException if the provider does not provide this type of component
* @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentAccess#syncComponent(ComponentKey)
*/
- public void sync(V provider) {
+ public void sync(Object provider) {
if (this.get(provider) instanceof AutoSyncedComponent synced) {
this.sync(provider, synced, synced);
}
@@ -139,13 +141,13 @@ public void sync(V provider) {
* This method has no visible effect if the given provider does not support synchronization, or
* the associated component does not implement an adequate synchronization interface.
*
- * @param the class of the component provider
* @param provider a component provider
* @param packetWriter a writer for the sync packet
* @throws NoSuchElementException if the provider does not provide this type of component
* @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentAccess#syncComponent(ComponentKey, ComponentPacketWriter)
*/
- public void sync(V provider, ComponentPacketWriter packetWriter) {
+ public void sync(Object provider, ComponentPacketWriter packetWriter) {
if (this.get(provider) instanceof AutoSyncedComponent synced) {
this.sync(provider, packetWriter, synced);
}
@@ -157,17 +159,16 @@ public void sync(V provider, ComponentPacketWriter packetWriter) {
* This method has no visible effect if the given provider does not support synchronization, or
* the associated component does not implement an adequate synchronization interface.
*
- * @param the class of the component provider
* @param provider a component provider
* @param packetWriter a writer for the sync packet
* @param predicate a predicate for which players should receive the packet
* @throws NoSuchElementException if the provider does not provide this type of component
* @throws ClassCastException if provider
does not implement {@link ComponentProvider}
+ * @see ComponentAccess#syncComponent(ComponentKey, ComponentPacketWriter, PlayerSyncPredicate)
*/
- public void sync(V provider, ComponentPacketWriter packetWriter, PlayerSyncPredicate predicate) {
- ComponentProvider prov = (ComponentProvider) provider;
- for (Iterator it = prov.getRecipientsForComponentSync(); it.hasNext();) {
- this.syncWith(it.next(), prov, packetWriter, predicate);
+ public void sync(Object provider, ComponentPacketWriter packetWriter, PlayerSyncPredicate predicate) {
+ for (ServerPlayerEntity player : ((ComponentProvider) provider).getRecipientsForComponentSync()) {
+ this.syncWith(player, (ComponentProvider) provider, packetWriter, predicate);
}
}
diff --git a/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentProvider.java b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentProvider.java
index 21b12da5..f715c535 100644
--- a/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentProvider.java
+++ b/cardinal-components-base/src/main/java/dev/onyxstudios/cca/api/v3/component/ComponentProvider.java
@@ -25,140 +25,22 @@
import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent;
import dev.onyxstudios.cca.api.v3.component.sync.ComponentPacketWriter;
import dev.onyxstudios.cca.api.v3.component.sync.PlayerSyncPredicate;
-import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
-import net.minecraft.block.entity.BlockEntity;
-import net.minecraft.entity.Entity;
-import net.minecraft.item.ItemStack;
-import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
-import net.minecraft.scoreboard.AbstractTeam;
-import net.minecraft.scoreboard.Scoreboard;
-import net.minecraft.scoreboard.Team;
import net.minecraft.server.network.ServerPlayerEntity;
-import net.minecraft.world.World;
-import net.minecraft.world.WorldProperties;
-import net.minecraft.world.chunk.Chunk;
-import net.minecraft.world.level.LevelProperties;
-import org.jetbrains.annotations.ApiStatus;
import javax.annotation.Nullable;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
+import java.util.List;
/**
- * used to access an object's components.
+ * @see ComponentAccess
+ * @see ComponentContainer
*/
-public interface ComponentProvider {
-
- /**
- * Convenience method to retrieve ComponentProvider from a given {@link BlockEntity}
- * Requires the cardinal-components-block module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromBlockEntity(BlockEntity blockEntity) {
- return (ComponentProvider) blockEntity;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from given {@link Chunk}.
- * Requires the cardinal-components-chunk module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromChunk(Chunk chunk) {
- return (ComponentProvider) chunk;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from a given {@link Entity}.
- * Requires the cardinal-components-entity module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromEntity(Entity entity) {
- return (ComponentProvider) entity;
- }
-
- /**
- * Convenience method to retrieve ComponentProvider from a given {@link ItemStack}
- * Requires the cardinal-components-item module.
- * @deprecated this module is getting removed; use Fabric's API-Lookup-API instead
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- @SuppressWarnings("ConstantConditions")
- static ComponentProvider fromItemStack(ItemStack stack) {
- return (ComponentProvider) (Object) stack;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from given {@link LevelProperties}.
- * Requires the cardinal-components-level module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromLevel(WorldProperties level) {
- return (ComponentProvider) level;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from given {@link Scoreboard}.
- * Requires the cardinal-components-scoreboard module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromScoreboard(Scoreboard scoreboard) {
- return (ComponentProvider) scoreboard;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from given {@link Team}.
- * Requires the cardinal-components-scoreboard module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromTeam(AbstractTeam team) {
- return (ComponentProvider) team;
- }
-
- /**
- * Convenience method to retrieve a ComponentProvider from a given {@link World}.
- * Requires the cardinal-components-world module.
- * @deprecated this interface is now injected by loom; update to 0.11 if you don't see it
- */
- @ApiStatus.ScheduledForRemoval(inVersion = "5.0.0")
- @Deprecated(forRemoval = true, since = "4.1.0")
- static ComponentProvider fromWorld(World world) {
- return (ComponentProvider) world;
- }
+public interface ComponentProvider extends ComponentAccess {
/**
* @return a runtime-generated component container storing statically declared components.
*/
- default ComponentContainer getComponentContainer() {
- throw new UnsupportedOperationException("Please implement me");
- }
-
- /**
- * @param key the key object for the type of component to retrieve
- * @return the nonnull value of the held component of this type
- * @param the type of component to retrieve
- * @throws NullPointerException if {@code key} is null
- * @throws NoSuchElementException if this provider does not provide the desired type of component
- * @since 4.1.0
- */
- @ApiStatus.Experimental
- default C getComponent(ComponentKey key) {
- return key.get(this);
- }
+ ComponentContainer getComponentContainer();
/**
* Retrieves an iterator describing the list of players who may receive
@@ -171,9 +53,8 @@ default C getComponent(ComponentKey key) {
*
* @return a list of player candidates for receiving component sync packets
*/
- default Iterator getRecipientsForComponentSync() {
- // TODO 5.0.0 replace with Iterable
- return Collections.emptyIterator();
+ default Iterable getRecipientsForComponentSync() {
+ return List.of();
}
/**
@@ -187,16 +68,6 @@ default Iterator getRecipientsForComponentSync() {
*/
@Nullable
default CustomPayloadS2CPacket toComponentPacket(ComponentKey super C> key, ComponentPacketWriter writer, ServerPlayerEntity recipient) {
- // TODO 4.0.0 inline
- return toComponentPacket(PacketByteBufs.create(), key, writer, recipient);
- }
-
- /**
- * @deprecated override/call {@link #toComponentPacket(ComponentKey, ComponentPacketWriter, ServerPlayerEntity)} instead
- */
- @SuppressWarnings("unused") @Deprecated(since = "3.0.0", forRemoval = true)
- @Nullable
- default CustomPayloadS2CPacket toComponentPacket(PacketByteBuf buf, ComponentKey super C> key, ComponentPacketWriter writer, ServerPlayerEntity recipient) {
return null;
}
}
diff --git a/cardinal-components-base/src/testmod/java/dev/onyxstudios/cca/test/base/Vita.java b/cardinal-components-base/src/testmod/java/dev/onyxstudios/cca/test/base/Vita.java
index 6178df10..c6122939 100644
--- a/cardinal-components-base/src/testmod/java/dev/onyxstudios/cca/test/base/Vita.java
+++ b/cardinal-components-base/src/testmod/java/dev/onyxstudios/cca/test/base/Vita.java
@@ -31,7 +31,7 @@
Vita extends ComponentV3 {
ComponentKey KEY = ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("cca-base-test", "vita"), Vita.class);
- static Vita get(T provider) {
+ static Vita get(Object provider) {
return KEY.get(provider);
}
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/CardinalComponentsBlock.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/CardinalComponentsBlock.java
index 9b5271c1..c5dabf62 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/CardinalComponentsBlock.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/CardinalComponentsBlock.java
@@ -58,7 +58,7 @@ public static void init() {
});
BlockEntitySyncAroundCallback.EVENT.register(tracked -> {
for (ComponentKey> key : ((ComponentProvider) tracked).getComponentContainer().keys()) {
- key.sync(tracked);
+ tracked.syncComponent(key);
}
});
}
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/block/StaticBlockComponentPlugin.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/block/StaticBlockComponentPlugin.java
index d915dbc3..a588a6c3 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/block/StaticBlockComponentPlugin.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/internal/block/StaticBlockComponentPlugin.java
@@ -41,13 +41,7 @@
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.function.Predicate;
public final class StaticBlockComponentPlugin extends LazyDispatcher implements BlockComponentFactoryRegistry {
@@ -69,15 +63,15 @@ private StaticBlockComponentPlugin() {
@Nullable
public BlockEntityTicker getComponentTicker(World world, T be, @Nullable BlockEntityTicker base) {
if (world.isClient && this.clientTicking.contains(be.getClass())) {
- if (base == null) return (w, pos, state, blockEntity) -> blockEntity.getComponentContainer().tickClientComponents();
+ if (base == null) return (w, pos, state, blockEntity) -> blockEntity.asComponentProvider().getComponentContainer().tickClientComponents();
return (w, pos, state, blockEntity) -> {
- blockEntity.getComponentContainer().tickClientComponents();
+ blockEntity.asComponentProvider().getComponentContainer().tickClientComponents();
base.tick(w, pos, state, blockEntity);
};
} else if (!world.isClient && this.serverTicking.contains(be.getClass())) {
- if (base == null) return (w, pos, state, blockEntity) -> blockEntity.getComponentContainer().tickServerComponents();
+ if (base == null) return (w, pos, state, blockEntity) -> blockEntity.asComponentProvider().getComponentContainer().tickServerComponents();
return (w, pos, state, blockEntity) -> {
- blockEntity.getComponentContainer().tickServerComponents();
+ blockEntity.asComponentProvider().getComponentContainer().tickServerComponents();
base.tick(w, pos, state, blockEntity);
};
}
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockDataObject.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockDataObject.java
index a8a80ffa..3f6f8d06 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockDataObject.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockDataObject.java
@@ -40,6 +40,6 @@ public abstract class MixinBlockDataObject {
@Inject(method = "setNbt", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/BlockEntity;markDirty()V"))
void readComponentData(NbtCompound nbt, CallbackInfo ci) {
- this.blockEntity.getComponentContainer().fromTag(nbt);
+ this.blockEntity.asComponentProvider().getComponentContainer().fromTag(nbt);
}
}
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockEntity.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockEntity.java
index ebf83209..9667e51b 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockEntity.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockEntity.java
@@ -50,8 +50,7 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import java.util.Collections;
-import java.util.Iterator;
+import java.util.List;
@Mixin(BlockEntity.class)
public abstract class MixinBlockEntity implements ComponentProvider {
@@ -71,7 +70,7 @@ public abstract class MixinBlockEntity implements ComponentProvider {
@Inject(method = "createFromNbt", at = @At("RETURN"))
private static void readComponentData(BlockPos pos, BlockState state, NbtCompound nbt, CallbackInfoReturnable cir) {
if (cir.getReturnValue() != null) {
- cir.getReturnValue().getComponentContainer().fromTag(nbt);
+ cir.getReturnValue().asComponentProvider().getComponentContainer().fromTag(nbt);
}
}
@@ -109,13 +108,13 @@ public ComponentContainer getComponentContainer() {
}
@Override
- public Iterator getRecipientsForComponentSync() {
+ public Iterable getRecipientsForComponentSync() {
World world = this.getWorld();
if (world != null && !world.isClient) {
- return PlayerLookup.tracking((BlockEntity) (Object) this).iterator();
+ return PlayerLookup.tracking((BlockEntity) (Object) this);
}
- return Collections.emptyIterator();
+ return List.of();
}
@Nullable
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockStateArgument.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockStateArgument.java
index 360c006a..563d74b6 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockStateArgument.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinBlockStateArgument.java
@@ -42,7 +42,7 @@ public class MixinBlockStateArgument {
@ModifyVariable(method = "setBlockState", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/BlockEntity;readNbt(Lnet/minecraft/nbt/NbtCompound;)V", shift = At.Shift.AFTER))
private BlockEntity readComponentData(BlockEntity be) {
if (this.data != null) {
- be.getComponentContainer().fromTag(this.data);
+ be.asComponentProvider().getComponentContainer().fromTag(this.data);
}
return be;
}
diff --git a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinFallingBlockEntity.java b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinFallingBlockEntity.java
index 59bd1f10..91192987 100644
--- a/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinFallingBlockEntity.java
+++ b/cardinal-components-block/src/main/java/dev/onyxstudios/cca/mixin/block/common/MixinFallingBlockEntity.java
@@ -44,6 +44,6 @@ public MixinFallingBlockEntity(EntityType> type, World world) {
@Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/BlockEntity;readNbt(Lnet/minecraft/nbt/NbtCompound;)V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILSOFT)
void readComponentData(CallbackInfo ci, Block $$0, BlockPos $$2, BlockEntity be, NbtCompound nbt) {
- be.getComponentContainer().fromTag(nbt);
+ be.asComponentProvider().getComponentContainer().fromTag(nbt);
}
}
diff --git a/cardinal-components-block/src/main/resources/fabric.mod.json b/cardinal-components-block/src/main/resources/fabric.mod.json
index 2332f490..d2ccf168 100644
--- a/cardinal-components-block/src/main/resources/fabric.mod.json
+++ b/cardinal-components-block/src/main/resources/fabric.mod.json
@@ -26,7 +26,7 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_2586": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/internal/chunk/ComponentsChunkNetworking.java b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/internal/chunk/ComponentsChunkNetworking.java
index 3b85c8c5..c7c9c044 100644
--- a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/internal/chunk/ComponentsChunkNetworking.java
+++ b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/internal/chunk/ComponentsChunkNetworking.java
@@ -34,11 +34,10 @@ public final class ComponentsChunkNetworking {
public static void init() {
if (FabricLoader.getInstance().isModLoaded("fabric-networking-api-v1")) {
ChunkSyncCallback.EVENT.register((player, tracked) -> {
- for (ComponentKey> key : tracked.getComponentContainer().keys()) {
+ for (ComponentKey> key : tracked.asComponentProvider().getComponentContainer().keys()) {
key.syncWith(player, (ComponentProvider) tracked);
}
});
}
}
-
}
diff --git a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinChunkSerializer.java b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinChunkSerializer.java
index 6ad91fdb..5e531fba 100644
--- a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinChunkSerializer.java
+++ b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinChunkSerializer.java
@@ -41,12 +41,12 @@ public abstract class MixinChunkSerializer {
private static void deserialize(ServerWorld world, PointOfInterestStorage pointOfInterestStorage, ChunkPos chunkPos, NbtCompound tag, CallbackInfoReturnable cir) {
ProtoChunk ret = cir.getReturnValue();
Chunk chunk = ret instanceof ReadOnlyChunk ? ((ReadOnlyChunk) ret).getWrappedChunk() : ret;
- chunk.getComponentContainer().fromTag(tag);
+ chunk.asComponentProvider().getComponentContainer().fromTag(tag);
}
@Inject(method = "serialize", at = @At("RETURN"))
private static void serialize(ServerWorld world, Chunk chunk, CallbackInfoReturnable cir) {
NbtCompound ret = cir.getReturnValue();
- chunk.getComponentContainer().toTag(ret);
+ chunk.asComponentProvider().getComponentContainer().toTag(ret);
}
}
diff --git a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinReadOnlyChunk.java b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinReadOnlyChunk.java
index 8bb6a3ac..3d58871a 100644
--- a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinReadOnlyChunk.java
+++ b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinReadOnlyChunk.java
@@ -39,6 +39,6 @@ public abstract class MixinReadOnlyChunk implements ComponentProvider {
@Nonnull
@Override
public ComponentContainer getComponentContainer() {
- return this.wrapped.getComponentContainer();
+ return this.wrapped.asComponentProvider().getComponentContainer();
}
}
diff --git a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinServerWorld.java b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinServerWorld.java
index 27e1205e..1c79e1bc 100644
--- a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinServerWorld.java
+++ b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinServerWorld.java
@@ -33,6 +33,6 @@
public abstract class MixinServerWorld {
@Inject(method = "tickChunk", at = @At("RETURN"))
private void tick(WorldChunk chunk, int randomTickSpeed, CallbackInfo ci) {
- chunk.getComponentContainer().tickServerComponents();
+ chunk.asComponentProvider().getComponentContainer().tickServerComponents();
}
}
diff --git a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinWorldChunk.java b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinWorldChunk.java
index 4a3d6d81..c6d4d819 100644
--- a/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinWorldChunk.java
+++ b/cardinal-components-chunk/src/main/java/dev/onyxstudios/cca/mixin/chunk/common/MixinWorldChunk.java
@@ -38,11 +38,7 @@
import net.minecraft.world.HeightLimitView;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
-import net.minecraft.world.chunk.Chunk;
-import net.minecraft.world.chunk.ChunkSection;
-import net.minecraft.world.chunk.ProtoChunk;
-import net.minecraft.world.chunk.UpgradeData;
-import net.minecraft.world.chunk.WorldChunk;
+import net.minecraft.world.chunk.*;
import net.minecraft.world.gen.chunk.BlendingData;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
@@ -51,8 +47,7 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import java.util.Collections;
-import java.util.Iterator;
+import java.util.List;
@Mixin(WorldChunk.class)
public abstract class MixinWorldChunk extends Chunk implements ComponentProvider {
@@ -64,11 +59,11 @@ public MixinWorldChunk(ChunkPos pos, UpgradeData upgradeData, HeightLimitView he
public abstract World getWorld();
@Override
- public Iterator getRecipientsForComponentSync() {
+ public Iterable getRecipientsForComponentSync() {
if (!this.getWorld().isClient()) {
- return PlayerLookup.tracking((ServerWorld) this.getWorld(), this.getPos()).iterator();
+ return PlayerLookup.tracking((ServerWorld) this.getWorld(), this.getPos());
}
- return Collections.emptyIterator();
+ return List.of();
}
@Override
@@ -84,6 +79,6 @@ public CustomPayloadS2CPacket toComponentPacket(
@Inject(method = "(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/world/chunk/ProtoChunk;Lnet/minecraft/world/chunk/WorldChunk$EntityLoader;)V", at = @At("RETURN"))
private void copyFromProto(ServerWorld world, ProtoChunk proto, WorldChunk.EntityLoader entityLoader, CallbackInfo ci) {
- this.getComponentContainer().copyFrom(proto.getComponentContainer());
+ this.getComponentContainer().copyFrom(proto.asComponentProvider().getComponentContainer());
}
}
diff --git a/cardinal-components-chunk/src/main/resources/fabric.mod.json b/cardinal-components-chunk/src/main/resources/fabric.mod.json
index 6ad973af..5001cf4c 100644
--- a/cardinal-components-chunk/src/main/resources/fabric.mod.json
+++ b/cardinal-components-chunk/src/main/resources/fabric.mod.json
@@ -26,7 +26,7 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_2791": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-chunk/src/testmod/java/dev/onyxstudios/cca/test/chunk/ChunkVita.java b/cardinal-components-chunk/src/testmod/java/dev/onyxstudios/cca/test/chunk/ChunkVita.java
index dba6cab8..54b9820b 100644
--- a/cardinal-components-chunk/src/testmod/java/dev/onyxstudios/cca/test/chunk/ChunkVita.java
+++ b/cardinal-components-chunk/src/testmod/java/dev/onyxstudios/cca/test/chunk/ChunkVita.java
@@ -24,7 +24,6 @@
import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent;
import dev.onyxstudios.cca.test.base.BaseVita;
-import dev.onyxstudios.cca.test.base.Vita;
import net.minecraft.world.chunk.Chunk;
public class ChunkVita extends BaseVita implements AutoSyncedComponent {
@@ -37,7 +36,7 @@ public ChunkVita(Chunk owner) {
@Override
public void setVitality(int value) {
super.setVitality(value);
- Vita.KEY.sync(this.owner);
- this.owner.setShouldSave(true);
+ this.owner.syncComponent(KEY);
+ this.owner.setNeedsSaving(true);
}
}
diff --git a/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/BucketableMixin.java b/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/BucketableMixin.java
index 71ed60b4..2b397a12 100644
--- a/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/BucketableMixin.java
+++ b/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/BucketableMixin.java
@@ -37,12 +37,12 @@ public interface BucketableMixin {
private static void writeComponentsToStack(MobEntity entity, ItemStack stack, CallbackInfo ci) {
NbtCompound nbt = stack.getNbt();
if (nbt != null) {
- entity.getComponentContainer().toTag(nbt);
+ entity.asComponentProvider().getComponentContainer().toTag(nbt);
}
}
@Inject(method = "copyDataFromNbt(Lnet/minecraft/entity/mob/MobEntity;Lnet/minecraft/nbt/NbtCompound;)V", at = @At("RETURN"))
private static void readComponentsFromStack(MobEntity entity, NbtCompound nbt, CallbackInfo ci) {
- entity.getComponentContainer().fromTag(nbt);
+ entity.asComponentProvider().getComponentContainer().fromTag(nbt);
}
}
diff --git a/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/MixinEntity.java b/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/MixinEntity.java
index 54ffebc9..e49d2669 100644
--- a/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/MixinEntity.java
+++ b/cardinal-components-entity/src/main/java/dev/onyxstudios/cca/mixin/entity/common/MixinEntity.java
@@ -22,7 +22,6 @@
*/
package dev.onyxstudios.cca.mixin.entity.common;
-import com.google.common.collect.Iterators;
import dev.onyxstudios.cca.api.v3.component.ComponentContainer;
import dev.onyxstudios.cca.api.v3.component.ComponentKey;
import dev.onyxstudios.cca.api.v3.component.ComponentProvider;
@@ -49,8 +48,9 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import java.util.Collections;
-import java.util.Iterator;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.List;
@Mixin(Entity.class)
public abstract class MixinEntity implements ComponentProvider {
@@ -87,16 +87,16 @@ public ComponentContainer getComponentContainer() {
}
@Override
- public Iterator getRecipientsForComponentSync() {
+ public Iterable getRecipientsForComponentSync() {
Entity holder = (Entity) (Object) this;
if (!this.world.isClient) {
- Iterator watchers = PlayerLookup.tracking(holder).iterator();
+ Deque watchers = new ArrayDeque<>(PlayerLookup.tracking(holder));
if (holder instanceof ServerPlayerEntity player && player.networkHandler != null) {
- return Iterators.concat(Iterators.singletonIterator(player), watchers);
+ watchers.addFirst(player);
}
return watchers;
}
- return Collections.emptyIterator();
+ return List.of();
}
@Nullable
diff --git a/cardinal-components-entity/src/main/resources/fabric.mod.json b/cardinal-components-entity/src/main/resources/fabric.mod.json
index ca1e7eda..e94f5f07 100644
--- a/cardinal-components-entity/src/main/resources/fabric.mod.json
+++ b/cardinal-components-entity/src/main/resources/fabric.mod.json
@@ -26,7 +26,7 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_1297": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestMod.java b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestMod.java
index d73f0fe8..6bb8f7b7 100644
--- a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestMod.java
+++ b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestMod.java
@@ -26,15 +26,15 @@
import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer;
import dev.onyxstudios.cca.test.base.Vita;
import net.fabricmc.api.ModInitializer;
-import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityType;
+import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class CcaEntityTestMod implements ModInitializer, EntityComponentInitializer {
- public static final EntityType TEST_ENTITY = FabricEntityTypeBuilder.create().entityFactory(TestEntity::new).build();
+ public static final EntityType TEST_ENTITY = EntityType.Builder.create(TestEntity::new, SpawnGroup.MISC).build("cca-entity-test");
@Override
public void registerEntityComponentFactories(EntityComponentFactoryRegistry registry) {
diff --git a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestSuite.java b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestSuite.java
index 99caac64..f62eec05 100644
--- a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestSuite.java
+++ b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/CcaEntityTestSuite.java
@@ -42,7 +42,7 @@ public void bucketableWorks(TestContext ctx) {
player.setStackInHand(Hand.MAIN_HAND, new ItemStack(Items.WATER_BUCKET));
BlockPos pos = new BlockPos(2, 0, 2);
var axolotl = ctx.spawnMob(EntityType.AXOLOTL, pos);
- Vita.get(axolotl).setVitality(3);
+ axolotl.getComponent(Vita.KEY).setVitality(3);
Bucketable.tryBucket(player, Hand.MAIN_HAND, axolotl);
((EntityBucketItem) Items.AXOLOTL_BUCKET).onEmptied(player, ctx.getWorld(), player.getStackInHand(Hand.MAIN_HAND), ctx.getAbsolutePos(pos));
ctx.expectEntityWithDataEnd(pos, EntityType.AXOLOTL, a -> a.getComponent(Vita.KEY).getVitality(), 3);
diff --git a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/PlayerVita.java b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/PlayerVita.java
index f61ed8b0..e79363e9 100644
--- a/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/PlayerVita.java
+++ b/cardinal-components-entity/src/testmod/java/dev/onyxstudios/cca/test/entity/PlayerVita.java
@@ -34,6 +34,7 @@
import net.minecraft.network.PacketByteBuf;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.server.network.ServerPlayerEntity;
+import org.jetbrains.annotations.NotNull;
/**
* A Vita component attached to players, and automatically synchronized with their owner
@@ -51,7 +52,7 @@ public void setVitality(int value) {
if (value != this.vitality) {
int increase = value - this.vitality;
super.setVitality(value);
- Vita.KEY.sync(this.owner, (buf, recipient) -> this.writeSyncPacket(buf, recipient, increase), PlayerSyncPredicate.all());
+ this.owner.syncComponent(Vita.KEY, (buf, recipient) -> this.writeSyncPacket(buf, recipient, increase), PlayerSyncPredicate.all());
}
}
@@ -100,7 +101,7 @@ public boolean shouldCopyForRespawn(boolean lossless, boolean keepInventory, boo
}
@Override
- public void copyForRespawn(BaseVita original, boolean lossless, boolean keepInventory, boolean switchingCharacter) {
+ public void copyForRespawn(@NotNull BaseVita original, boolean lossless, boolean keepInventory, boolean switchingCharacter) {
PlayerComponent.super.copyForRespawn(original, lossless, keepInventory, switchingCharacter);
if (!lossless && !keepInventory) {
this.vitality -= 5;
diff --git a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/api/v3/level/LevelComponents.java b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/api/v3/level/LevelComponents.java
index 87cefe8a..7703db02 100644
--- a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/api/v3/level/LevelComponents.java
+++ b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/api/v3/level/LevelComponents.java
@@ -48,7 +48,7 @@ public final class LevelComponents {
public static void sync(ComponentKey> key, MinecraftServer server) {
WorldProperties props = server.getSaveProperties().getMainWorldProperties();
for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
- key.syncWith(player, props);
+ key.syncWith(player, props.asComponentProvider());
}
}
@@ -66,7 +66,7 @@ public static void sync(ComponentKey> key, MinecraftServer server, ComponentPa
Component c = key.get(props);
if (c instanceof AutoSyncedComponent sc) {
for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
- key.syncWith(player, props, packetWriter, sc);
+ key.syncWith(player, props.asComponentProvider(), packetWriter, sc);
}
}
}
@@ -84,7 +84,7 @@ public static void sync(ComponentKey> key, MinecraftServer server, ComponentPa
public static void sync(ComponentKey> key, MinecraftServer server, ComponentPacketWriter packetWriter, PlayerSyncPredicate predicate) {
WorldProperties props = server.getSaveProperties().getMainWorldProperties();
for (ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
- key.syncWith(player, props, packetWriter, predicate);
+ key.syncWith(player, props.asComponentProvider(), packetWriter, predicate);
}
}
}
diff --git a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/internal/level/ComponentsLevelNetworking.java b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/internal/level/ComponentsLevelNetworking.java
index a86602d3..4cf6ba57 100644
--- a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/internal/level/ComponentsLevelNetworking.java
+++ b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/internal/level/ComponentsLevelNetworking.java
@@ -49,8 +49,8 @@ public static void init() {
WorldSyncCallback.EVENT.register((player, world) -> {
WorldProperties props = world.getLevelProperties();
- for (ComponentKey> key : props.getComponentContainer().keys()) {
- key.syncWith(player, props);
+ for (ComponentKey> key : props.asComponentProvider().getComponentContainer().keys()) {
+ key.syncWith(player, props.asComponentProvider());
}
});
}
diff --git a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinLevelProperties.java b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinLevelProperties.java
index 402569a4..79dfd36f 100644
--- a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinLevelProperties.java
+++ b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinLevelProperties.java
@@ -56,7 +56,6 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import java.util.Iterator;
import java.util.Set;
import java.util.UUID;
@@ -87,7 +86,7 @@ public ComponentContainer getComponentContainer() {
}
@Override
- public Iterator getRecipientsForComponentSync() {
+ public Iterable getRecipientsForComponentSync() {
throw new UnsupportedOperationException("Please call LevelComponents#sync(MinecraftServer) instead of ComponentKey#sync");
}
diff --git a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinMinecraftServer.java b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinMinecraftServer.java
index f9555819..9d948bf5 100644
--- a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinMinecraftServer.java
+++ b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinMinecraftServer.java
@@ -38,6 +38,6 @@ public abstract class MixinMinecraftServer {
@Inject(at = @At("TAIL"), method = "tick")
private void onEndTick(BooleanSupplier shouldKeepTicking, CallbackInfo info) {
- this.getSaveProperties().getMainWorldProperties().getComponentContainer().tickServerComponents();
+ this.getSaveProperties().getMainWorldProperties().asComponentProvider().getComponentContainer().tickServerComponents();
}
}
diff --git a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinUnmodifiableLevelProperties.java b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinUnmodifiableLevelProperties.java
index 08e841cd..13d8369e 100644
--- a/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinUnmodifiableLevelProperties.java
+++ b/cardinal-components-level/src/main/java/dev/onyxstudios/cca/mixin/level/common/MixinUnmodifiableLevelProperties.java
@@ -40,6 +40,6 @@ public abstract class MixinUnmodifiableLevelProperties implements ComponentProvi
@Nonnull
@Override
public ComponentContainer getComponentContainer() {
- return this.worldProperties.getComponentContainer();
+ return this.worldProperties.asComponentProvider().getComponentContainer();
}
}
diff --git a/cardinal-components-level/src/main/resources/fabric.mod.json b/cardinal-components-level/src/main/resources/fabric.mod.json
index 7c897c46..506cc575 100644
--- a/cardinal-components-level/src/main/resources/fabric.mod.json
+++ b/cardinal-components-level/src/main/resources/fabric.mod.json
@@ -26,7 +26,7 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_5217": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/internal/scoreboard/ComponentsScoreboardNetworking.java b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/internal/scoreboard/ComponentsScoreboardNetworking.java
index 7b7b6cbf..8b0f9e30 100644
--- a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/internal/scoreboard/ComponentsScoreboardNetworking.java
+++ b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/internal/scoreboard/ComponentsScoreboardNetworking.java
@@ -56,19 +56,19 @@ public final class ComponentsScoreboardNetworking {
public static void init() {
if (FabricLoader.getInstance().isModLoaded("fabric-networking-api-v1")) {
ScoreboardSyncCallback.EVENT.register((player, tracked) -> {
- for (ComponentKey> key : tracked.getComponentContainer().keys()) {
- key.syncWith(player, tracked);
+ for (ComponentKey> key : tracked.asComponentProvider().getComponentContainer().keys()) {
+ key.syncWith(player, tracked.asComponentProvider());
}
for (Team team : tracked.getTeams()) {
- for (ComponentKey> key : team.getComponentContainer().keys()) {
- key.syncWith(player, team);
+ for (ComponentKey> key : team.asComponentProvider().getComponentContainer().keys()) {
+ key.syncWith(player, team.asComponentProvider());
}
}
});
TeamAddCallback.EVENT.register((tracked) -> {
- for (ComponentKey> key : tracked.getComponentContainer().keys()) {
- key.sync(tracked);
+ for (ComponentKey> key : tracked.asComponentProvider().getComponentContainer().keys()) {
+ tracked.syncComponent(key);
}
});
}
diff --git a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinMinecraftServer.java b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinMinecraftServer.java
index fd570727..e77ee7d6 100644
--- a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinMinecraftServer.java
+++ b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinMinecraftServer.java
@@ -40,10 +40,10 @@ public abstract class MixinMinecraftServer {
@Inject(at = @At("TAIL"), method = "tick")
private void onEndTick(BooleanSupplier shouldKeepTicking, CallbackInfo info) {
ServerScoreboard scoreboard = this.getScoreboard();
- scoreboard.getComponentContainer().tickServerComponents();
+ scoreboard.asComponentProvider().getComponentContainer().tickServerComponents();
for (Team team : scoreboard.getTeams()) {
- team.getComponentContainer().tickServerComponents();
+ team.asComponentProvider().getComponentContainer().tickServerComponents();
}
}
}
diff --git a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinServerScoreboard.java b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinServerScoreboard.java
index 220da2b8..f9bca0f8 100644
--- a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinServerScoreboard.java
+++ b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinServerScoreboard.java
@@ -46,8 +46,7 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import javax.annotation.Nullable;
-import java.util.Collections;
-import java.util.Iterator;
+import java.util.List;
import java.util.function.Supplier;
@Mixin(ServerScoreboard.class)
@@ -60,13 +59,13 @@ public abstract class MixinServerScoreboard extends MixinScoreboard {
private MinecraftServer server;
@Override
- public Iterator getRecipientsForComponentSync() {
+ public Iterable getRecipientsForComponentSync() {
MinecraftServer server = this.server;
if (server.getPlayerManager() != null) {
- return server.getPlayerManager().getPlayerList().iterator();
+ return server.getPlayerManager().getPlayerList();
}
- return Collections.emptyIterator();
+ return List.of();
}
@Nullable
diff --git a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinTeam.java b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinTeam.java
index b2d65686..b93a60d5 100644
--- a/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinTeam.java
+++ b/cardinal-components-scoreboard/src/main/java/dev/onyxstudios/cca/mixin/scoreboard/MixinTeam.java
@@ -45,7 +45,6 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import java.util.Iterator;
@Mixin(Team.class)
public abstract class MixinTeam implements ComponentProvider, TeamAccessor {
@@ -74,8 +73,8 @@ public ComponentContainer getComponentContainer() {
}
@Override
- public Iterator getRecipientsForComponentSync() {
- return ((ComponentProvider) this.scoreboard).getRecipientsForComponentSync();
+ public Iterable getRecipientsForComponentSync() {
+ return this.scoreboard.asComponentProvider().getRecipientsForComponentSync();
}
@Nullable
diff --git a/cardinal-components-scoreboard/src/main/resources/fabric.mod.json b/cardinal-components-scoreboard/src/main/resources/fabric.mod.json
index 53bac4e6..cf325fce 100644
--- a/cardinal-components-scoreboard/src/main/resources/fabric.mod.json
+++ b/cardinal-components-scoreboard/src/main/resources/fabric.mod.json
@@ -26,10 +26,10 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_269": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
],
"net/minecraft/class_268": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-world/src/main/java/dev/onyxstudios/cca/mixin/world/common/MixinServerWorld.java b/cardinal-components-world/src/main/java/dev/onyxstudios/cca/mixin/world/common/MixinServerWorld.java
index 6124096e..808522ca 100644
--- a/cardinal-components-world/src/main/java/dev/onyxstudios/cca/mixin/world/common/MixinServerWorld.java
+++ b/cardinal-components-world/src/main/java/dev/onyxstudios/cca/mixin/world/common/MixinServerWorld.java
@@ -41,7 +41,6 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import javax.annotation.Nullable;
-import java.util.Iterator;
import java.util.List;
import java.util.function.BooleanSupplier;
@@ -70,8 +69,8 @@ private void tick(BooleanSupplier shouldKeepTicking, CallbackInfo ci) {
}
@Override
- public Iterator getRecipientsForComponentSync() {
- return this.getPlayers().iterator();
+ public Iterable getRecipientsForComponentSync() {
+ return this.getPlayers();
}
@Nullable
diff --git a/cardinal-components-world/src/main/resources/fabric.mod.json b/cardinal-components-world/src/main/resources/fabric.mod.json
index 5101c50d..b51f296f 100644
--- a/cardinal-components-world/src/main/resources/fabric.mod.json
+++ b/cardinal-components-world/src/main/resources/fabric.mod.json
@@ -26,7 +26,7 @@
},
"loom:injected_interfaces": {
"net/minecraft/class_1937": [
- "dev/onyxstudios/cca/api/v3/component/ComponentProvider"
+ "dev/onyxstudios/cca/api/v3/component/ComponentAccess"
]
}
},
diff --git a/cardinal-components-world/src/testmod/java/dev/onyxstudios/cca/test/world/AmbientVita.java b/cardinal-components-world/src/testmod/java/dev/onyxstudios/cca/test/world/AmbientVita.java
index f63aeb32..bb6f3dbc 100644
--- a/cardinal-components-world/src/testmod/java/dev/onyxstudios/cca/test/world/AmbientVita.java
+++ b/cardinal-components-world/src/testmod/java/dev/onyxstudios/cca/test/world/AmbientVita.java
@@ -32,9 +32,7 @@
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
-import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
-import net.minecraft.text.TranslatableText;
import net.minecraft.world.World;
import java.util.Objects;
@@ -49,10 +47,10 @@ public void applySyncPacket(PacketByteBuf buf) {
this.setVitality(vita);
World world = Objects.requireNonNull(MinecraftClient.getInstance().player).world;
// Very bad shortcut to get a dimension's name
- Text worldName = new LiteralText(
+ Text worldName = Text.literal(
Objects.requireNonNull(world.getRegistryKey() == World.OVERWORLD ? "Overworld" : "Alien World")
);
- Text worldVita = new TranslatableText(
+ Text worldVita = Text.translatable(
"componenttest:title.world_vitality",
Vita.get(world).getVitality(),
Vita.get(world.getLevelProperties()).getVitality()
@@ -80,7 +78,7 @@ public WorldVita(World world) {
@Override
public void syncWithAll(MinecraftServer server) {
- Vita.KEY.sync(this.world);
+ this.world.syncComponent(KEY);
}
@Override
diff --git a/changelog.md b/changelog.md
index 07314b4a..f6028efc 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,13 @@
+------------------------------------------------------
+Version 5.0.0
+------------------------------------------------------
+Updated to MC 1.19
+
+**Additions**
+- Component providers now expose the `ComponentAccess` interface through Loom's interface injection
+ - `ComponentAccess` adds `getComponent` as an alternative to `ComponentKey#get`, and `syncComponent` as an alternative to `ComponentKey#sync`
+ - It is now recommended to use e.g. `entity.getComponent(KEY)` instead of `KEY.get(entity)`, as this enforces type checking
+
------------------------------------------------------
Version 4.1.3
------------------------------------------------------
diff --git a/gradle.properties b/gradle.properties
index bf1e9508..c8f1018c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,21 +2,20 @@
org.gradle.jvmargs = -Xmx3G
#see https://modmuss50.me/fabric.html
-minecraft_version=1.18.1
-yarn_mappings=22
-loader_version=0.12.12
-
+minecraft_version=1.19-pre1
+yarn_mappings=1
+loader_version=0.14.5
#Fabric api
-fabric_api_version=0.46.2+1.18
+fabric_api_version=0.52.4+1.19
-elmendorf_version=0.4.0
+elmendorf_version=0.6.0
#Publishing
-mod_version = 4.1.3
+mod_version = 5.0.0-beta.1
curseforge_id = 318449
modrinth_id = K01OU20C
-curseforge_versions = 1.18-Snapshot; 1.18; 1.18.1
-modrinth_versions = 1.18; 1.18.1
+curseforge_versions = 1.19-Snapshot
+modrinth_versions = 1.19
changelog_url = https://github.com/OnyxStudios/Cardinal-Components-API/blob
release_type = release
display_name = Cardinal-Components-API
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/CCATestClient.java b/src/testmod/java/dev/onyxstudios/componenttest/content/CCATestClient.java
index 1ce16004..7a40ee25 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/CCATestClient.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/content/CCATestClient.java
@@ -25,13 +25,13 @@
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
import net.minecraft.client.render.entity.ZombieEntityRenderer;
-import net.minecraft.text.TranslatableText;
+import net.minecraft.text.Text;
public final class CCATestClient {
public static void clientInit() {
EntityRendererRegistry.register(CardinalComponentsTest.VITALITY_ZOMBIE, ZombieEntityRenderer::new);
ItemTooltipCallback.EVENT.register((stack, tooltipContext, lines) ->
- TestComponents.ALT_VITA.maybeGet(stack).ifPresent(vita -> lines.add(new TranslatableText("componenttest:tooltip.vitality.native", vita.getVitality())))
+ TestComponents.ALT_VITA.maybeGet(stack).ifPresent(vita -> lines.add(Text.translatable("componenttest:tooltip.vitality.native", vita.getVitality())))
);
}
}
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/CardinalComponentsTest.java b/src/testmod/java/dev/onyxstudios/componenttest/content/CardinalComponentsTest.java
index dd4f4f1b..480b290f 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/CardinalComponentsTest.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/content/CardinalComponentsTest.java
@@ -31,7 +31,6 @@
import dev.onyxstudios.cca.test.base.Vita;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
-import net.fabricmc.fabric.api.event.player.UseItemCallback;
import net.fabricmc.fabric.api.lookup.v1.block.BlockApiLookup;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
@@ -47,7 +46,6 @@
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
-import net.minecraft.util.TypedActionResult;
import net.minecraft.util.math.Direction;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.chunk.ChunkStatus;
@@ -72,7 +70,7 @@ public class CardinalComponentsTest {
public static final VitalityStickItem VITALITY_STICK = Registry.register(Registry.ITEM, VITA_STICK_ID,
new VitalityStickItem(new Item.Settings().group(ITEM_GROUP).maxDamage(50)));
- public static final VitalityCondenser VITALITY_CONDENSER = new VitalityCondenser(FabricBlockSettings.of(Material.STONE).dropsNothing().luminance(5).ticksRandomly());
+ public static final VitalityCondenser VITALITY_CONDENSER = new VitalityCondenser(FabricBlockSettings.of(Material.STONE).dropsNothing().luminance(s -> 5).ticksRandomly());
public static final EntityType VITALITY_ZOMBIE = Registry.register(Registry.ENTITY_TYPE, "componenttest:vita_zombie",
FabricEntityTypeBuilder.create(SpawnGroup.MONSTER, VitalityZombieEntity::new).dimensions(EntityType.ZOMBIE.getDimensions()).build());
@@ -123,12 +121,6 @@ public static void init() {
assert false : "Only one factory should be created for any given provider type";
} catch (IllegalStateException ignored) { }
- UseItemCallback.EVENT.register((playerEntity, world, hand) -> {
- ItemStack stack = playerEntity.getStackInHand(hand);
- LOGGER.info("{} vitality: {}", stack, TestComponents.ALT_VITA.get(stack).getVitality()); // init components
- return TypedActionResult.pass(stack);
- });
-
VITA_API_LOOKUP.registerForBlocks(
(world, pos, state, blockEntity, context) -> Vita.KEY.get(Objects.requireNonNull(world.getChunk(pos.getX() >> 4, pos.getZ() >> 4, ChunkStatus.FULL, false))),
VITALITY_CONDENSER
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/VitaCommand.java b/src/testmod/java/dev/onyxstudios/componenttest/content/VitaCommand.java
index 64a589a5..34900992 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/VitaCommand.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/content/VitaCommand.java
@@ -45,7 +45,7 @@ public static void register(CommandDispatcher dispatcher) {
.executes(context -> {
Chunk chunk = context.getSource().getWorld().getChunk(BlockPosArgumentType.getBlockPos(context, "pos"));
Vita.get(chunk).setVitality(IntegerArgumentType.getInteger(context, "amount"));
- chunk.setShouldSave(true);
+ chunk.setNeedsSaving(true);
context.getSource().sendFeedback(Text.of("success!"), false);
return 1;
})
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityCondenser.java b/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityCondenser.java
index 9c7ed360..b8d6f218 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityCondenser.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityCondenser.java
@@ -27,16 +27,16 @@
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.world.ServerWorld;
-import net.minecraft.text.TranslatableText;
+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.util.math.random.AbstractRandom;
import net.minecraft.world.World;
import org.jetbrains.annotations.ApiStatus;
import java.util.Objects;
-import java.util.Random;
public class VitalityCondenser extends Block {
public VitalityCondenser(Settings settings) {
@@ -46,7 +46,7 @@ public VitalityCondenser(Settings settings) {
@SuppressWarnings("deprecation")
@ApiStatus.OverrideOnly
@Override
- public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) {
+ public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, AbstractRandom rand) {
Vita.get(world).transferTo(Vita.get(world.getChunk(pos)), 1);
}
@@ -56,7 +56,7 @@ public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Ran
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hitInfo) {
// only on client side, to confirm that sync works
if (world.isClient) {
- player.sendMessage(new TranslatableText("componenttest:action.chunk_vitality",
+ player.sendMessage(Text.translatable("componenttest:action.chunk_vitality",
Objects.requireNonNull(CardinalComponentsTest.VITA_API_LOOKUP.find(world, pos, state, null, hitInfo.getSide())).getVitality()), true);
}
return ActionResult.SUCCESS;
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityStickItem.java b/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityStickItem.java
index 4320ee4a..8591cc27 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityStickItem.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/content/VitalityStickItem.java
@@ -22,8 +22,8 @@
*/
package dev.onyxstudios.componenttest.content;
-import dev.onyxstudios.componenttest.content.vita.AmbientVita;
import dev.onyxstudios.cca.test.base.Vita;
+import dev.onyxstudios.cca.test.world.AmbientVita;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.BlockState;
@@ -38,7 +38,6 @@
import net.minecraft.scoreboard.AbstractTeam;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text;
-import net.minecraft.text.TranslatableText;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
@@ -85,7 +84,7 @@ public ActionResult useOnBlock(ItemUsageContext context) {
context.getSide()
);
if (vita != null) {
- context.getPlayer().sendMessage(new TranslatableText("componenttest:action.block_vitality",
+ context.getPlayer().sendMessage(Text.translatable("componenttest:action.block_vitality",
vita.getVitality()), true);
}
}
@@ -115,10 +114,10 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity holder
@Override
public void appendTooltip(ItemStack stack, @Nullable World world, List lines, TooltipContext ctx) {
super.appendTooltip(stack, world, lines, ctx);
- lines.add(new TranslatableText("componenttest:tooltip.vitality", Vita.KEY.get(stack).getVitality()));
+ lines.add(Text.translatable("componenttest:tooltip.vitality", Vita.KEY.get(stack).getVitality()));
PlayerEntity holder = MinecraftClient.getInstance().player;
if (holder != null) {
- lines.add(new TranslatableText("componenttest:tooltip.self_vitality", Vita.KEY.get(holder).getVitality()));
+ lines.add(Text.translatable("componenttest:tooltip.self_vitality", holder.getComponent(Vita.KEY).getVitality()));
}
}
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/content/vita/AmbientVita.java b/src/testmod/java/dev/onyxstudios/componenttest/content/vita/AmbientVita.java
deleted file mode 100644
index 86f19cf8..00000000
--- a/src/testmod/java/dev/onyxstudios/componenttest/content/vita/AmbientVita.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Cardinal-Components-API
- * Copyright (C) 2019-2022 OnyxStudios
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
- * OR OTHER DEALINGS IN THE SOFTWARE.
- */
-package dev.onyxstudios.componenttest.content.vita;
-
-import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent;
-import dev.onyxstudios.cca.api.v3.component.tick.ClientTickingComponent;
-import dev.onyxstudios.cca.test.base.BaseVita;
-import dev.onyxstudios.cca.test.base.Vita;
-import dev.onyxstudios.componenttest.content.CardinalComponentsTest;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.hud.InGameHud;
-import net.minecraft.network.PacketByteBuf;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.server.network.ServerPlayerEntity;
-import net.minecraft.text.LiteralText;
-import net.minecraft.text.Text;
-import net.minecraft.text.TranslatableText;
-import net.minecraft.world.World;
-
-import java.util.Objects;
-
-public abstract class AmbientVita extends BaseVita implements AutoSyncedComponent {
-
- public abstract void syncWithAll(MinecraftServer server);
-
- @Override
- public void applySyncPacket(PacketByteBuf buf) {
- int vita = buf.readInt();
- this.setVitality(vita);
- World world = Objects.requireNonNull(MinecraftClient.getInstance().player).world;
- // Very bad shortcut to get a dimension's name
- Text worldName = new LiteralText(
- Objects.requireNonNull(world.getRegistryKey() == World.OVERWORLD ? "Overworld" : "Alien World")
- );
- Text worldVita = new TranslatableText(
- "componenttest:title.world_vitality",
- Vita.get(world).getVitality(),
- Vita.get(world.getLevelProperties()).getVitality()
- );
- InGameHud inGameHud = MinecraftClient.getInstance().inGameHud;
- inGameHud.setTitleTicks(-1, -1, -1);
- inGameHud.setTitle(worldName);
- inGameHud.setSubtitle(worldVita);
- }
-
- /**
- * proper implementation of {@code writeToPacket}, writes a single int instead of a whole tag
- */
- @Override
- public void writeSyncPacket(PacketByteBuf buf, ServerPlayerEntity player) {
- buf.writeInt(this.getVitality());
- }
-
- public static class WorldVita extends AmbientVita implements ClientTickingComponent {
- private final World world;
-
- public WorldVita(World world) {
- this.world = world;
- }
-
- @Override
- public void syncWithAll(MinecraftServer server) {
- Vita.KEY.sync(this.world);
- }
-
- @Override
- public void clientTick() {
- if (this.world.getTime() % 2400 == 0) {
- CardinalComponentsTest.LOGGER.info("The world still runs, and is now worth {}", this.vitality);
- }
- }
- }
-
-}
diff --git a/src/testmod/java/dev/onyxstudios/componenttest/tests/CcaTestSuite.java b/src/testmod/java/dev/onyxstudios/componenttest/tests/CcaTestSuite.java
index edd708ec..136e42a1 100644
--- a/src/testmod/java/dev/onyxstudios/componenttest/tests/CcaTestSuite.java
+++ b/src/testmod/java/dev/onyxstudios/componenttest/tests/CcaTestSuite.java
@@ -22,7 +22,7 @@
*/
package dev.onyxstudios.componenttest.tests;
-import dev.onyxstudios.cca.api.v3.component.ComponentProvider;
+import dev.onyxstudios.cca.api.v3.component.ComponentAccess;
import io.github.ladysnake.elmendorf.GameTestUtil;
import net.fabricmc.fabric.api.gametest.v1.FabricGameTest;
import net.minecraft.block.Blocks;
@@ -52,8 +52,8 @@ public void interfacesGetInjected(TestContext context) {
context.complete();
}
- private void checkContainer(ComponentProvider provider) {
+ private void checkContainer(ComponentAccess provider) {
//noinspection ConstantConditions
- GameTestUtil.assertTrue(provider + " should correctly implement ComponentProvider", provider.getComponentContainer() != null);
+ GameTestUtil.assertTrue(provider + " should correctly implement ComponentProvider", provider.asComponentProvider().getComponentContainer() != null);
}
}