mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 19:20:29 +00:00
Replace get...() functions with properties. NOT ALL TESTED YET!
This commit is contained in:
parent
b2cc6ec82a
commit
45803e4a49
@ -1,94 +1,36 @@
|
|||||||
package dan200.computercraft.core.apis;
|
package dan200.computercraft.core.apis;
|
||||||
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import org.luaj.vm2.LuaTable;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import org.luaj.vm2.LuaValue;
|
||||||
|
|
||||||
import java.text.ParseException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
|
||||||
public class TimeAPI implements ILuaAPI{
|
public class TimeAPI extends LuaTable {
|
||||||
|
|
||||||
private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
|
private TimeZone timeZone;
|
||||||
|
private Calendar calendarInstance;
|
||||||
|
|
||||||
private String formatDate(String pattern, Date date) {
|
public TimeAPI() {
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
timeZone = TimeZone.getDefault();
|
||||||
return sdf.format(date);
|
calendarInstance = Calendar.getInstance( timeZone );
|
||||||
}
|
}
|
||||||
|
|
||||||
private long parseDate(String pattern, String value) throws LuaException {
|
public void setTimeZone(String timeZoneId) {
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
timeZone = TimeZone.getTimeZone(timeZoneId);
|
||||||
long timestamp;
|
calendarInstance = Calendar.getInstance( timeZone );
|
||||||
try {
|
|
||||||
timestamp = sdf.parse(value).getTime();
|
|
||||||
} catch (ParseException parseException) {
|
|
||||||
throw new LuaException("Date can't parsed");
|
|
||||||
}
|
|
||||||
return timestamp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public LuaValue getResult(int method) {
|
||||||
public String[] getNames() {
|
|
||||||
return new String[]{
|
|
||||||
"time",
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startup() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void advance(double _dt) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shutdown() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] getMethodNames() {
|
|
||||||
return new String[] {
|
|
||||||
"format",
|
|
||||||
"getDay",
|
|
||||||
"getMonth",
|
|
||||||
"getYear",
|
|
||||||
"getHour",
|
|
||||||
"getMinute",
|
|
||||||
"getSecound",
|
|
||||||
"getTime",
|
|
||||||
"parse"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException {
|
|
||||||
|
|
||||||
//timestamp like PHP without mills!
|
//timestamp like PHP without mills!
|
||||||
|
|
||||||
Calendar cal = Calendar.getInstance();
|
Object returnValue = null;
|
||||||
|
|
||||||
//If timestamp is given
|
|
||||||
if (args.length > 0 && args[0] != null && args[0] instanceof Double) {
|
|
||||||
long argTime = ((Double)args[0]).longValue()*1000;
|
|
||||||
cal.setTimeInMillis(argTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
Object[] returnArray = new Object[1];
|
|
||||||
int calendarValue = -1;
|
int calendarValue = -1;
|
||||||
int addValue = 0;
|
int addValue = 0;
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case 0:
|
|
||||||
//format()
|
|
||||||
String format = DEFAULT_TIME_FORMAT;
|
|
||||||
if (args.length == 1 && args[0] instanceof String) {
|
|
||||||
format = (String) args[0];
|
|
||||||
}
|
|
||||||
else if (args.length == 2 && args[1] instanceof String) {
|
|
||||||
format = (String) args[1];
|
|
||||||
}
|
|
||||||
returnArray[0] = formatDate(format, cal.getTime());
|
|
||||||
break;
|
|
||||||
case 1:
|
case 1:
|
||||||
//getDay()
|
//getDay()
|
||||||
calendarValue = Calendar.DAY_OF_MONTH;
|
calendarValue = Calendar.DAY_OF_MONTH;
|
||||||
@ -116,21 +58,54 @@ public class TimeAPI implements ILuaAPI{
|
|||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
//getTime()
|
//getTime()
|
||||||
returnArray[0] = cal.getTimeInMillis() / 1000;
|
return wrap( Math.floor( calendarInstance.getTimeInMillis() / 1000 ) );
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
//parse(String pattern, String input)
|
|
||||||
if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) {
|
|
||||||
throw new LuaException("String expected!");
|
|
||||||
}
|
|
||||||
String pattern = (String) args[0],
|
|
||||||
input = (String) args[1];
|
|
||||||
returnArray[0] = parseDate(pattern, input) / 1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (calendarValue != -1 && returnArray[0] == null) {
|
if (calendarValue != -1 && returnValue == null) {
|
||||||
returnArray[0] = cal.get(calendarValue)+addValue;
|
return wrap( calendarInstance.get(calendarValue)+addValue );
|
||||||
}
|
}
|
||||||
return returnArray;
|
else
|
||||||
|
return LuaValue.NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LuaValue get(LuaValue luaValue) {
|
||||||
|
|
||||||
|
String searched = luaValue.toString();
|
||||||
|
|
||||||
|
if (searched.equals("day"))
|
||||||
|
return getResult(1);
|
||||||
|
else if (searched.equals("month"))
|
||||||
|
return getResult(2);
|
||||||
|
else if (searched.equals("year"))
|
||||||
|
return getResult(3);
|
||||||
|
else if (searched.equals("hour"))
|
||||||
|
return getResult(4);
|
||||||
|
else if (searched.equals("minute"))
|
||||||
|
return getResult(5);
|
||||||
|
else if (searched.equals("second"))
|
||||||
|
return getResult(6);
|
||||||
|
else if (searched.equals("timezone"))
|
||||||
|
return wrap(timeZone.getID());
|
||||||
|
else
|
||||||
|
return super.get(luaValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(LuaValue key, LuaValue value) {
|
||||||
|
if (key.toString().equals("timezone")) {
|
||||||
|
setTimeZone( value.toString() );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
super.set(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private LuaValue wrap(double number) {
|
||||||
|
return LuaValue.valueOf(number);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LuaValue wrap(String value) {
|
||||||
|
return LuaValue.valueOf(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,92 @@
|
|||||||
|
package dan200.computercraft.core.apis;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.lua.ILuaContext;
|
||||||
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by timia2109 (Tim Ittermann) on 04.05.2017.
|
||||||
|
*
|
||||||
|
* @author timia2109 (Tim Ittermann)
|
||||||
|
*/
|
||||||
|
public class TimeUtilsAPI implements ILuaAPI {
|
||||||
|
|
||||||
|
private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd";
|
||||||
|
|
||||||
|
private String formatDate(String pattern, Date date) {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
||||||
|
return sdf.format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
private long parseDate(String pattern, String value) throws LuaException {
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
|
||||||
|
long timestamp;
|
||||||
|
try {
|
||||||
|
timestamp = sdf.parse(value).getTime();
|
||||||
|
} catch (ParseException parseException) {
|
||||||
|
throw new LuaException("Date can't parsed");
|
||||||
|
}
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getNames() {
|
||||||
|
return new String[]{
|
||||||
|
"timeutils"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startup() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void advance(double _dt) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void shutdown() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getMethodNames() {
|
||||||
|
return new String[]{
|
||||||
|
"format",
|
||||||
|
"parse"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException {
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
|
||||||
|
if (args.length > 0 && args[0] != null && args[0] instanceof Double) {
|
||||||
|
long argTime = ((Double) args[0]).longValue() * 1000;
|
||||||
|
cal.setTimeInMillis(argTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (method) {
|
||||||
|
case 0:
|
||||||
|
String format = DEFAULT_TIME_FORMAT;
|
||||||
|
if (args.length == 1 && args[0] instanceof String) {
|
||||||
|
format = (String) args[0];
|
||||||
|
} else if (args.length == 2 && args[1] instanceof String) {
|
||||||
|
format = (String) args[1];
|
||||||
|
}
|
||||||
|
return new Object[]{formatDate(format, cal.getTime())};
|
||||||
|
case 1:
|
||||||
|
//parse(String pattern, String input)
|
||||||
|
if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) {
|
||||||
|
throw new LuaException("String expected!");
|
||||||
|
}
|
||||||
|
String pattern = (String) args[0],
|
||||||
|
input = (String) args[1];
|
||||||
|
return new Object[]{parseDate(pattern, input) / 1000};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -615,7 +615,7 @@ public class Computer
|
|||||||
m_apis.add( new PeripheralAPI( m_apiEnvironment ) );
|
m_apis.add( new PeripheralAPI( m_apiEnvironment ) );
|
||||||
m_apis.add( new OSAPI( m_apiEnvironment ) );
|
m_apis.add( new OSAPI( m_apiEnvironment ) );
|
||||||
m_apis.add( new BitAPI( m_apiEnvironment ) );
|
m_apis.add( new BitAPI( m_apiEnvironment ) );
|
||||||
m_apis.add( new TimeAPI() );
|
m_apis.add( new TimeUtilsAPI() );
|
||||||
//m_apis.add( new BufferAPI( m_apiEnvironment ) );
|
//m_apis.add( new BufferAPI( m_apiEnvironment ) );
|
||||||
if( ComputerCraft.http_enable )
|
if( ComputerCraft.http_enable )
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,7 @@ import dan200.computercraft.api.lua.ILuaObject;
|
|||||||
import dan200.computercraft.api.lua.ILuaTask;
|
import dan200.computercraft.api.lua.ILuaTask;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
import dan200.computercraft.core.apis.ILuaAPI;
|
import dan200.computercraft.core.apis.ILuaAPI;
|
||||||
|
import dan200.computercraft.core.apis.TimeAPI;
|
||||||
import dan200.computercraft.core.computer.Computer;
|
import dan200.computercraft.core.computer.Computer;
|
||||||
import dan200.computercraft.core.computer.ITask;
|
import dan200.computercraft.core.computer.ITask;
|
||||||
import dan200.computercraft.core.computer.MainThread;
|
import dan200.computercraft.core.computer.MainThread;
|
||||||
@ -120,6 +121,9 @@ public class LuaJLuaMachine implements ILuaMachine
|
|||||||
|
|
||||||
m_softAbortMessage = null;
|
m_softAbortMessage = null;
|
||||||
m_hardAbortMessage = null;
|
m_hardAbortMessage = null;
|
||||||
|
|
||||||
|
//Add to use lua setters at the TimeAPI
|
||||||
|
m_globals.set("time", new TimeAPI());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user