Skip to content

Commit

Permalink
Merge branch 'main' into quick-craft
Browse files Browse the repository at this point in the history
  • Loading branch information
PiTheGuy authored Aug 13, 2024
2 parents a5f78f2 + 26bd475 commit 5eeb868
Show file tree
Hide file tree
Showing 15 changed files with 331 additions and 144 deletions.
9 changes: 4 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ java_version=21
#########################################################
# Minecraft Versions #
#########################################################
minecraft_release=1.21
minecraft_version=1.21
minecraft_version_range=1.21
minecraft_version=1.21.1
minecraft_version_range=[1.21.1]
# https://projects.neoforged.net/neoforged/neoforge
neoforge_version=21.0.146
neoforge_version_range=[21.0.143,)
neoforge_version=21.1.1
neoforge_version_range=[21.1.1,)

#########################################################
# Parchment #
Expand Down
55 changes: 50 additions & 5 deletions src/main/java/appeng/api/networking/GridServices.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,16 @@
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import net.minecraft.world.level.Level;

import appeng.me.helpers.GridServiceContainer;

/**
* A registry of grid services to extend grid functionality.
*/
Expand Down Expand Up @@ -92,14 +96,37 @@ private static boolean isRegistered(Class<?> publicInterface) {
* <p/>
* This is used by AE2 internally to initialize the services for a grid.
*/
static Map<Class<?>, IGridServiceProvider> createServices(IGrid g) {
var result = new LinkedHashMap<Class<?>, IGridServiceProvider>(registry.size());
static GridServiceContainer createServices(IGrid g) {
var services = new IdentityHashMap<Class<?>, IGridServiceProvider>(registry.size());
var serverStartTickServices = new ArrayList<IGridServiceProvider>(registry.size());
var levelStartTickServices = new ArrayList<IGridServiceProvider>(registry.size());
var levelEndTickServices = new ArrayList<IGridServiceProvider>(registry.size());
var serverEndTickServices = new ArrayList<IGridServiceProvider>(registry.size());

for (var registration : registry) {
result.put(registration.publicInterface, registration.construct(g, result));
var service = registration.construct(g, services);
services.put(registration.publicInterface, service);

if (registration.hasServerStartTick) {
serverStartTickServices.add(service);
}
if (registration.hasLevelStartTick) {
levelStartTickServices.add(service);
}
if (registration.hasLevelEndTick) {
levelEndTickServices.add(service);
}
if (registration.hasServerEndTick) {
serverEndTickServices.add(service);
}
}

return result;
return new GridServiceContainer(
services,
serverStartTickServices.toArray(IGridServiceProvider[]::new),
levelStartTickServices.toArray(IGridServiceProvider[]::new),
levelEndTickServices.toArray(IGridServiceProvider[]::new),
serverEndTickServices.toArray(IGridServiceProvider[]::new));
}

private static class GridCacheRegistration<T extends IGridServiceProvider> {
Expand All @@ -114,6 +141,11 @@ private static class GridCacheRegistration<T extends IGridServiceProvider> {

private final Set<Class<?>> dependencies;

private final boolean hasServerStartTick;
private final boolean hasLevelStartTick;
private final boolean hasLevelEndTick;
private final boolean hasServerEndTick;

@SuppressWarnings("unchecked")
public GridCacheRegistration(Class<T> implClass, Class<?> publicInterface) {
this.publicInterface = publicInterface;
Expand All @@ -130,6 +162,19 @@ public GridCacheRegistration(Class<T> implClass, Class<?> publicInterface) {
this.dependencies = Arrays.stream(this.constructorParameterTypes)
.filter(t -> !t.equals(IGrid.class))
.collect(Collectors.toSet());

try {
this.hasServerStartTick = implClass.getMethod("onServerStartTick")
.getDeclaringClass() != IGridServiceProvider.class;
this.hasLevelStartTick = implClass.getMethod("onLevelStartTick", Level.class)
.getDeclaringClass() != IGridServiceProvider.class;
this.hasLevelEndTick = implClass.getMethod("onLevelEndTick", Level.class)
.getDeclaringClass() != IGridServiceProvider.class;
this.hasServerEndTick = implClass.getMethod("onServerEndTick")
.getDeclaringClass() != IGridServiceProvider.class;
} catch (NoSuchMethodException exception) {
throw new RuntimeException("Failed to check which methods the grid service implements", exception);
}
}

public IGridServiceProvider construct(IGrid g, Map<Class<?>, IGridServiceProvider> createdServices) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/appeng/api/networking/GridServicesInternal.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@

package appeng.api.networking;

import java.util.Map;
import appeng.me.helpers.GridServiceContainer;

/**
* Allows access to non-public features of {@link GridServices}.
*/
public class GridServicesInternal {

public static Map<Class<?>, IGridServiceProvider> createServices(IGrid g) {
public static GridServiceContainer createServices(IGrid g) {
return GridServices.createServices(g);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ private record RecipeTypeMapping<T extends Recipe<C>, C extends RecipeInput>(
Function<RecipeHolder<T>, LytBlock> factory) {
@Nullable
LytBlock tryCreate(RecipeManager recipeManager, Item resultItem) {
var registryAccess = Platform.getClientRegistryAccess();

// We try to find non-special recipes first then fall back to special
List<RecipeHolder<T>> fallbackCandidates = new ArrayList<>();
for (var recipe : recipeManager.byType(recipeType)) {
Expand All @@ -117,24 +119,14 @@ LytBlock tryCreate(RecipeManager recipeManager, Item resultItem) {
continue;
}

try {
if (recipe.value().getResultItem(null).getItem() == resultItem) {
return factory.apply(recipe);
}
} catch (Exception ignored) {
// :-P
// Happens if the recipe doesn't accept a null RegistryAccess
if (recipe.value().getResultItem(registryAccess).getItem() == resultItem) {
return factory.apply(recipe);
}
}

for (var recipe : fallbackCandidates) {
try {
if (recipe.value().getResultItem(null).getItem() == resultItem) {
return factory.apply(recipe);
}
} catch (Exception ignored) {
// :-P
// Happens if the recipe doesn't accept a null RegistryAccess
if (recipe.value().getResultItem(registryAccess).getItem() == resultItem) {
return factory.apply(recipe);
}
}

Expand Down
72 changes: 48 additions & 24 deletions src/main/java/appeng/core/AEConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,62 +100,76 @@ public boolean isSearchModNameInTooltips() {
}

public void setSearchModNameInTooltips(boolean enable) {
client.searchModNameInTooltips.set(enable);
client.spec.save();
if (enable != client.searchModNameInTooltips.getAsBoolean()) {
client.searchModNameInTooltips.set(enable);
client.spec.save();
}
}

public boolean isUseExternalSearch() {
return client.useExternalSearch.get();
}

public void setUseExternalSearch(boolean enable) {
client.useExternalSearch.set(enable);
client.spec.save();
if (enable != client.useExternalSearch.getAsBoolean()) {
client.useExternalSearch.set(enable);
client.spec.save();
}
}

public boolean isClearExternalSearchOnOpen() {
return client.clearExternalSearchOnOpen.get();
}

public void setClearExternalSearchOnOpen(boolean enable) {
client.clearExternalSearchOnOpen.set(enable);
client.spec.save();
if (enable != client.clearExternalSearchOnOpen.getAsBoolean()) {
client.clearExternalSearchOnOpen.set(enable);
client.spec.save();
}
}

public boolean isRememberLastSearch() {
return client.rememberLastSearch.get();
}

public void setRememberLastSearch(boolean enable) {
client.rememberLastSearch.set(enable);
client.spec.save();
if (enable != client.rememberLastSearch.getAsBoolean()) {
client.rememberLastSearch.set(enable);
client.spec.save();
}
}

public boolean isAutoFocusSearch() {
return client.autoFocusSearch.get();
}

public void setAutoFocusSearch(boolean enable) {
client.autoFocusSearch.set(enable);
client.spec.save();
if (enable != client.autoFocusSearch.getAsBoolean()) {
client.autoFocusSearch.set(enable);
client.spec.save();
}
}

public boolean isSyncWithExternalSearch() {
return client.syncWithExternalSearch.get();
}

public void setSyncWithExternalSearch(boolean enable) {
client.syncWithExternalSearch.set(enable);
client.spec.save();
if (enable != client.syncWithExternalSearch.getAsBoolean()) {
client.syncWithExternalSearch.set(enable);
client.spec.save();
}
}

public TerminalStyle getTerminalStyle() {
return client.terminalStyle.get();
}

public void setTerminalStyle(TerminalStyle setting) {
client.terminalStyle.set(setting);
client.spec.save();
if (setting != client.terminalStyle.get()) {
client.terminalStyle.set(setting);
client.spec.save();
}
}

public double getGridEnergyStoragePerNode() {
Expand Down Expand Up @@ -263,8 +277,10 @@ public boolean isShowDebugGuiOverlays() {
}

public void setShowDebugGuiOverlays(boolean enable) {
client.debugGuiOverlays.set(enable);
client.spec.save();
if (enable != client.debugGuiOverlays.getAsBoolean()) {
client.debugGuiOverlays.set(enable);
client.spec.save();
}
}

public boolean isSpawnPressesInMeteoritesEnabled() {
Expand Down Expand Up @@ -308,8 +324,10 @@ public ChannelMode getChannelMode() {
}

public void setChannelModel(ChannelMode mode) {
common.channels.set(mode);
client.spec.save();
if (mode != common.channels.get()) {
common.channels.set(mode);
client.spec.save();
}
}

public int getPathfindingStepsPerTick() {
Expand Down Expand Up @@ -355,26 +373,32 @@ public boolean isPinAutoCraftedItems() {
}

public void setPinAutoCraftedItems(boolean enabled) {
client.pinAutoCraftedItems.set(enabled);
client.spec.save();
if (enabled != client.pinAutoCraftedItems.getAsBoolean()) {
client.pinAutoCraftedItems.set(enabled);
client.spec.save();
}
}

public boolean isNotifyForFinishedCraftingJobs() {
return client.notifyForFinishedCraftingJobs.get();
}

public void setNotifyForFinishedCraftingJobs(boolean enabled) {
client.notifyForFinishedCraftingJobs.set(enabled);
client.spec.save();
if (enabled != client.notifyForFinishedCraftingJobs.getAsBoolean()) {
client.notifyForFinishedCraftingJobs.set(enabled);
client.spec.save();
}
}

public boolean isClearGridOnClose() {
return client.clearGridOnClose.get();
}

public void setClearGridOnClose(boolean enabled) {
client.clearGridOnClose.set(enabled);
client.spec.save();
if (enabled != client.clearGridOnClose.getAsBoolean()) {
client.clearGridOnClose.set(enabled);
client.spec.save();
}
}

public double getVibrationChamberBaseEnergyPerFuelTick() {
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/appeng/crafting/execution/CraftingCpuLogic.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import appeng.core.network.clientbound.CraftingJobStatusPacket;
import appeng.crafting.CraftingLink;
import appeng.crafting.inv.ListCraftingInventory;
import appeng.hooks.ticking.TickHandler;
import appeng.me.cluster.implementations.CraftingCPUCluster;
import appeng.me.service.CraftingService;

Expand All @@ -75,6 +76,8 @@ public class CraftingCpuLogic {
*/
private boolean cantStoreItems = false;

private long lastModifiedOnTick = TickHandler.instance().getCurrentTick();

public CraftingCpuLogic(CraftingCPUCluster cluster) {
this.cluster = cluster;
}
Expand Down Expand Up @@ -390,11 +393,16 @@ public void storeItems() {
}

private void postChange(AEKey what) {
lastModifiedOnTick = TickHandler.instance().getCurrentTick();
for (var listener : listeners) {
listener.accept(what);
}
}

public long getLastModifiedOnTick() {
return lastModifiedOnTick;
}

public boolean hasJob() {
return this.job != null;
}
Expand Down Expand Up @@ -509,6 +517,8 @@ public boolean isCantStoreItems() {
}

private void notifyJobOwner(ExecutingCraftingJob job, CraftingJobStatusPacket.Status status) {
this.lastModifiedOnTick = TickHandler.instance().getCurrentTick();

var playerId = job.playerId;
if (playerId == null) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStac
@Override
public int getBarWidth(ItemStack stack) {
double filled = getAECurrentPower(stack) / getAEMaxPower(stack);
return Mth.clamp((int) (filled * 13), 0, 13);
return Mth.clamp((int) Math.round(filled * 13), 0, 13);
}

@Override
Expand Down
Loading

0 comments on commit 5eeb868

Please sign in to comment.