11package dev .compactmods .crafting .client ;
22
33import dev .compactmods .crafting .api .field .IMiniaturizationField ;
4+ import dev .compactmods .crafting .api .field .MiniaturizationFieldSize ;
45import dev .compactmods .crafting .data .CCAttachments ;
6+ import dev .compactmods .crafting .field .IMutableMiniaturizationField ;
57import dev .compactmods .crafting .field .MiniaturizationField ;
8+ import dev .compactmods .crafting .network .FieldActivatedPacket ;
69import dev .compactmods .crafting .projector .FieldProjectorBlock ;
10+ import dev .compactmods .crafting .recipes .MiniaturizationRecipe ;
711import net .minecraft .client .Minecraft ;
812import net .minecraft .client .multiplayer .ClientLevel ;
913import net .minecraft .core .BlockPos ;
1014import net .minecraft .nbt .CompoundTag ;
11- import net .minecraft .resources .ResourceLocation ;
12- import org .jetbrains .annotations .Nullable ;
15+ import net .minecraft .world .item .crafting .RecipeHolder ;
1316
1417import java .util .stream .Stream ;
1518
1619public abstract class ClientPacketHandler {
1720
18- public static void handleFieldActivation (IMiniaturizationField field , CompoundTag fieldClientData ) {
21+ public static void handleFieldActivation (IMiniaturizationField < MiniaturizationRecipe > field , CompoundTag fieldClientData ) {
1922 Minecraft mc = Minecraft .getInstance ();
2023 mc .submitAsync (() -> {
2124 ClientLevel cw = mc .level ;
2225 if (cw == null )
2326 return ;
2427
25- field .setLevel (cw );
2628 // FIXME field.loadClientData(fieldClientData);
2729
2830 mc .level .getData (CCAttachments .ACTIVE_FIELDS ).registerField (field );
@@ -35,60 +37,82 @@ public static void handleFieldDeactivation(BlockPos center) {
3537
3638 mc .submitAsync (() -> {
3739 mc .level .getExistingData (CCAttachments .ACTIVE_FIELDS ).ifPresent (fields -> {
38- fields .get (center )
39- . map ( IMiniaturizationField :: getProjectorPositions )
40- . orElse ( Stream . empty ())
41- . forEach ( proj -> FieldProjectorBlock . deactivateProjector ( mc . level , proj ) );
40+ fields .get (center ). ifPresent ( field -> {
41+ final var projectors = field . getProjectors ();
42+ projectors . disableAll ();
43+ } );
4244
4345 fields .unregisterField (center );
4446 });
4547 });
4648 }
4749
48- public static void handleFieldData (CompoundTag fieldData ) {
50+ // public static void handleFieldData(CompoundTag fieldData) {
51+ // Minecraft mc = Minecraft.getInstance();
52+ // if (mc.level == null)
53+ // return;
54+ //
55+ // MiniaturizationField field = new MiniaturizationField();
56+ // field.setLevel(mc.level);
57+ // // FIXME field.loadClientData(fieldData);
58+ //
59+ //// mc.level.getCapability(CCCapabilities.FIELDS)
60+ //// .ifPresent(fields -> {
61+ //// fields.setLevel(mc.level);
62+ //// CompactCrafting.LOGGER.debug("Registering field on client");
63+ //// final IMiniaturizationField fieldRegistered = fields.registerField(field);
64+ ////
65+ //// CompactCrafting.LOGGER.debug("Setting field references");
66+ ////
67+ //// field.getProjectorPositions()
68+ //// .map(mc.level::getBlockEntity)
69+ //// .map(tile -> (FieldProjectorEntity) tile)
70+ //// .filter(Objects::nonNull)
71+ //// .forEach(tile -> {
72+ //// final BlockState state = tile.getBlockState();
73+ //// tile.setFieldRef(fieldRegistered.getRef());
74+ //// });
75+ //// });
76+ // }
77+
78+ public static void removeField (BlockPos fieldCenter ) {
4979 Minecraft mc = Minecraft .getInstance ();
5080 if (mc .level == null )
5181 return ;
5282
53- MiniaturizationField field = new MiniaturizationField ();
54- field .setLevel (mc .level );
55- // FIXME field.loadClientData(fieldData);
56-
57- // mc.level.getCapability(CCCapabilities.FIELDS)
58- // .ifPresent(fields -> {
59- // fields.setLevel(mc.level);
60- // CompactCrafting.LOGGER.debug("Registering field on client");
61- // final IMiniaturizationField fieldRegistered = fields.registerField(field);
62- //
63- // CompactCrafting.LOGGER.debug("Setting field references");
64- //
65- // field.getProjectorPositions()
66- // .map(mc.level::getBlockEntity)
67- // .map(tile -> (FieldProjectorEntity) tile)
68- // .filter(Objects::nonNull)
69- // .forEach(tile -> {
70- // final BlockState state = tile.getBlockState();
71- // tile.setFieldRef(fieldRegistered.getRef());
72- // });
73- // });
83+ mc .level .getData (CCAttachments .ACTIVE_FIELDS ).unregisterField (fieldCenter );
7484 }
7585
76- public static void removeField (BlockPos fieldCenter ) {
86+ public static void clearFieldRecipe (BlockPos center ) {
7787 Minecraft mc = Minecraft .getInstance ();
7888 if (mc .level == null )
7989 return ;
8090
81- // mc.level.getCapability(CCCapabilities.FIELDS)
82- // .ifPresent(fields -> fields.unregisterField(fieldCenter));
91+ mc .level .getData (CCAttachments .ACTIVE_FIELDS )
92+ .get (center )
93+ .filter (field -> field instanceof IMutableMiniaturizationField )
94+ .map (IMutableMiniaturizationField .class ::cast )
95+ .ifPresent (IMutableMiniaturizationField ::clearRecipe );
8396 }
8497
85- public static void handleRecipeChanged (BlockPos center , @ Nullable ResourceLocation recipe ) {
98+ public static void changeFieldRecipe (BlockPos center , RecipeHolder < MiniaturizationRecipe > recipe ) {
8699 Minecraft mc = Minecraft .getInstance ();
87100 if (mc .level == null )
88101 return ;
89102
90- // mc.level.getCapability(CCCapabilities.FIELDS)
91- // .lazyMap(af -> af.get(center))
92- // .ifPresent(field -> field.ifPresent(f -> f.setRecipe(recipe)));
103+ mc .level .getData (CCAttachments .ACTIVE_FIELDS )
104+ .get (center )
105+ .filter (field -> field instanceof IMutableMiniaturizationField )
106+ .map (IMutableMiniaturizationField .class ::cast )
107+ .ifPresent (field -> {
108+ field .setRecipe (recipe );
109+ field .spawnParticlesAtProjectors (MiniaturizationField .RECIPE_MATCHED_PARTICLE_OPTS );
110+ });
111+
112+ }
113+
114+ public static FieldActivatedPacket createFieldActivationPacket (MiniaturizationFieldSize fieldSize , BlockPos center , CompoundTag clientData ) {
115+ var field = new MiniaturizationField (Minecraft .getInstance ().level , fieldSize , center );
116+ return new FieldActivatedPacket (field , clientData );
93117 }
94118}
0 commit comments